Как да изпълним (чрез ant) ​​набор от sql файлове с mysql команден ред

Искам да изпълня всички 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>

Ако има контейнер, тогава искам да го използвам за атрибута "input" на маркера "apply" (и да премахна аргумента "-e").

Има наличен таг "srcfile" за елемента "apply", но не мога да го извикам (не работи):

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

Имате ли предложения как да го направите с родна декларация на мравка? Възможно ли е да се създаде заобиколно решение с помощта на antcall+fileset (+placeholder)?

Заобиколното решение на noobish е да се повтори чрез набор от файлове и да се създаде временен sql файл с препратки към sql файловете. Като последна стъпка: наречете го статичен чрез "-e". Но това е заобиколно решение, което искам да премахна (по този въпрос).

PS: Не искам да използвам функциите на ant-contrib.


person user1182585    schedule 01.02.2012    source източник
comment
Малко извън темата, тъй като получихте отговора си. Можете да пишете <arg value=".." />, не е нужно да използвате </arg>, просто го пишете с />. О, да,... и приемете отговор, в случай че сте получили своя.   -  person Paul Peelen    schedule 22.03.2012


Отговори (1)


Защо не използвате ant sql задача, която е предназначена да прави точно това, което искате да направя?

В противен случай можете да използвате вложения елемент srcfile:

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

Има пълен пример на страницата с ръководство на задачата за прилагане.

person JB Nizet    schedule 01.02.2012