fos1 / sf-s-q-l-tools-plugin
Doctrine SQL 工具插件为 Symfony1。按照顺序执行具有触发器、存储过程和事件的 SQL 文件的任务。与任何类型的数据库引擎兼容。
Requires
- composer/installers: ~1.0
README
sfSQLToolsPlugin
是一个 symfony1 插件,提供了一种简单的方法来执行特定于数据库的功能,例如存储过程、触发器、事件以及其他 SQL
命令。
内容
它为您提供一项任务来执行带有附加选项的 SQL
文件。
安装
- 下载插件
将插件添加到您的 composer.json
需求中
"require": {
...
"fos1/sf-s-q-l-tools-plugin": "1.0.*",
...
- 安装插件:编辑您的
ProjectConfiguration.class.php
文件
$this->enablePlugins(array('sSQLToolsPlugin');
- 清除缓存
symfony cc
用法
symfony sql:execute [--application[="..."]] [--env[="..."]] [--dir[="..."]] [--dir-depth[="..."]] [--file[="..."]] [--exclude[="..."]] [--delimiter[="..."]]
选项
--application
应用程序名称(默认:1)--env
环境(默认:dev)--dir
搜索*.sql
文件所在的目录(默认:data/sql/tasks
)--dir-depth
搜索目录深度(默认:0)--file
要执行的一个文件--exclude
要排除的文件模式或以逗号分隔的文件列表--delimiter
查询分隔符(默认:~)
描述
sql:execute
任务读取搜索目录中的 *.sql
文件,然后按顺序运行它们。
-
调用方法:
$ ./symfony sql:execute
-
要在特定环境中工作,请使用
--env
选项运行此命令:$ ./symfony sql:execute --env=prod
-
要使用特定应用程序的数据库设置,请使用
--application
选项:$ ./symfony sql:execute --application=frontend
-
如果您需要自定义
*.sql
位置目录名(默认为"data/sql/tasks"
),则可以传递一个--dir
选项:$ ./symfony sql:execute --dir=data/my/folder
-
要排除
--dir
文件夹中的一个或多个文件,请使用--exclude
选项。要从"data/my/folder"
目录排除"00-misc.sql"
文件,请使用:$ ./symfony sql:execute --dir=data/my/folder --exclude="00-misc.sql"
-
要从
"data/my/folder"
目录排除多个文件,请用逗号分隔:$ ./symfony sql:execute --dir=data/my/folder --exclude="00-misc.sql, 10-triggers.sql, 20-events.sql"
-
或者,您可以使用 glob 模式(排除所有包含单词:U_"old"_ 和 "backup" 的文件名)
$ ./symfony sql:execute --dir=data/my/folder --exclude="old,backup"
-
要只运行特定的
SQL
文件,请使用--file
$ ./symfony sql:execute --file=data/sql/tasks_1/alter-tables.sql
-
或者要运行目录
"data/sql/tasks_1"
中的特定文件:$ ./symfony sql:execute --dir=data/sql/tasks_1 --file=alter-tables.sql
-
要搜索到子目录一定级别的 *.sql 文件,请使用
--dir-depth
选项:$ ./symfony sql:execute --dir-depth=5
-
要递归地搜索 *.sql 文件,请将 "*" 传递给
--dir-depth
选项:$ ./symfony sql:execute --dir-depth=*
示例
这是您的文件 "00-procedures.sql" 的内容(MySQL)
CREATE PROCEDURE `simpleproc`(OUT param1 INT) BEGIN SELECT COUNT(*) INTO param1 FROM t; END ~ CREATE FUNCTION `hello`(s CHAR(20)) RETURNS CHAR(50) RETURN CONCAT('Hello, ',s,'!'); ~ CREATE PROCEDURE molo() SELECT 'Molo';
- 现在,在 config/databases.yml 中设置您的 DBMS 连接(如果您还没有这样做)
- 在开发环境中执行此过程:
symfony sql:execute --env=dev --file=data/sql/00-procedures.sql
- 运行此任务后,您应该得到以下输出
>> sql:execute start
>> sql:execute [00-procedures.sql] CREATE PROC...OUNT(*) INTO param1 FROM t; END
>> sql:execute [00-procedures.sql] CREATE FUNC...RETURN CONCAT('Hello, ',s,'!');
>> sql:execute [00-procedures.sql] CREATE PROCEDURE molo() SELECT 'Molo';
>> sql:execute end
单元测试
- 单元测试(14/14)成功完成。
- 测试用
MySQL 5.0.84
MySQL 5.1.40
PostgreSQL 8.3.8