2012-02-01 49 views
2

我想執行所有在給定目錄中阻止的sql文件。 我想撥打電話是這樣的:如何使用mysql命令行執行(通過ant)一組sql文件

mysql --host=dbbackend --user=stack --password=overflow dbname -e 'source file1.sql' 

這可以表示爲:

<apply executable="mysql" dir="." failonerror="true"> 
     <arg value="--host=dbbackend"></arg> 
     <arg value="--user=stack"></arg> 
     <arg value="--password=overflow"></arg> 
     <arg value="mydbname"></arg> 
     <arg value="--e source dummy.sql"></arg> 
     <fileset dir="${db.dump.location.data}" casesensitive="no" description="take all sql files"> 
      <patternset> 
       <include name="**/*.sql" /> 
      </patternset> 
     </fileset> 
    </apply> 

如果我在DIR 3個SQL文件,然後dummy.sql被稱爲3倍。到現在爲止還挺好。是否有可用的佔位符來改變這一行:

 <arg value="--e source dummy.sql"></arg> 

到:

 <arg value="--e source ${unknown.placeholder.name}"></arg> 

如果有一個佔位符,然後我想使用它的「應用」標籤的「輸入」屬性(並刪除參數「-e」)。

沒有爲「應用」元素的「SRCFILE」標籤可用,但我不能把這個(不工作):

 <arg value="--e source"></arg> 
     <srcfile/> 

你對如何與本地螞蟻做到這一點建議宣言? 是否可以使用antcall + fileset(+佔位符)構建解決方法?

Noobish的解決方法是通過fileset進行迭代,並創建一個臨時sql文件並引用sql文件。作爲最後一步:通過「-e」將其稱爲靜態。但是,這是一個解決方法,我想刪除(通過這個問題)。

PS:我不想使用ant-contrib功能。

+0

小題外話,因爲你有你的答案。你可以編寫'',你不必使用'',只需要用'/>'來寫。哦,是的,...並接受一個答案,如果你已經得到你的。 – 2012-03-22 11:55:56

回答

0

爲什麼不使用ant sql task,這是專門用來做你想做的事情?

否則,您可以使用srcfile嵌套元素:

<apply ... parallel="false"> 
    <...> 
    <arg value="--e source" /> 
    <srcfile/> 
    <fileset ...></fileset> 
</apply> 

上有manual page of the apply task一個完整的例子。