如何使用mysql命令行执行(通过ant)一组sql文件

时间:2012-02-01 12:16:04

标签: mysql file ant set execute

我想执行所有在给定目录中阻止的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>

如果我在该目录中有3个sql文件,那么dummy.sql被调用3次。到现在为止还挺好。是否有可用于更改此行的占位符:

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

成:

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

如果有占位符,那么我想将它用作“apply”标记的“input”属性(并删除参数“-e”)。

“apply”元素有一个“srcfile”标签,但我无法调用它(不起作用):

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

您对如何使用本机蚂蚁声明有建议吗? 是否可以使用antcall + fileset(+占位符)构建变通方法?

noobish解决方法是通过文件集进行迭代并创建一个带有sql文件引用的临时sql文件。作为最后一步:通过“-e”将其称为静态。但这是我要删除的解决方法(通过这个问题)。

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

1 个答案:

答案 0 :(得分:0)

为什么不使用ant sql task,它的目的是做你想做的事情?

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

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

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