The sfSQLToolsPlugin is a symfony1 plugin that provides easy way to execute
database specific features like stored procedures, triggers, events and any
other SQL commands., (*1)
Contents
It gives you one task to execute SQL files with additional options., (*2)
Installation
Add the plugin your composer.json requirements:, (*3)
"require": {
...
"fos1/sf-s-q-l-tools-plugin": "1.0.*",
...
- Install the plugin: edit your
ProjectConfiguration.class.php file
$this->enablePlugins(array('sSQLToolsPlugin');
- Clear you cache
symfony cc
Usage
symfony sql:execute [--application[="..."]] [--env[="..."]] [--dir[="..."]] [--dir-depth[="..."]] [--file[="..."]] [--exclude[="..."]] [--delimiter[="..."]]
Options:
-
--application The application name (default: 1)
-
--env The environment (default: dev)
-
--dir The directory where to look for *.sql file (default: data/sql/tasks)
-
--dir-depth Search directory depth (default: 0)
-
--file One file to be executed
-
--exclude Exclude file pattern or file list separated by commas
-
--delimiter Query delimiter (default: ~)
Description:
The sql:execute task reads *.sql files in search directory and then runs them in order, (*4)
-
Call it with:, (*5)
$ ./symfony sql:execute
-
To work in certain environment run this command with --env option, (*6)
$ ./symfony sql:execute --env=prod
-
To use certain application`s database settings use --application option, (*7)
$ ./symfony sql:execute --application=frontend
-
If you need to customize the *.sql location dirname (default is "data/sql/tasks"), you can pass a --dir option:, (*8)
$ ./symfony sql:execute --dir=data/my/folder
-
To exclude one or more files from --dir folder use --exclude option. In order to exclude "00-misc.sql" file from "data/my/folder" directory use:, (*9)
$ ./symfony sql:execute --dir=data/my/folder --exclude="00-misc.sql"
-
In order to exclude many files from "data/my/folder" directory, separate is by commas:, (*10)
$ ./symfony sql:execute --dir=data/my/folder --exclude="00-misc.sql, 10-triggers.sql, 20-events.sql"
-
Or you can use glob patterns (exclude all filename which contains words: U_"old"_ and "backup"):, (*11)
$ ./symfony sql:execute --dir=data/my/folder --exclude="*old*,*backup*"
-
To run only one specific SQL file use --file:, (*12)
$ ./symfony sql:execute --file=data/sql/tasks_1/alter-tables.sql
-
or to run one specific file in directory "data/sql/tasks_1", (*13)
$ ./symfony sql:execute --dir=data/sql/tasks_1 --file=alter-tables.sql
-
To search for *.sql file until sub folder certain level use --dir-depth option:, (*14)
$ ./symfony sql:execute --dir-depth=5
-
To search for *.sql file recursively pass "*" to --dir-depth option:, (*15)
$ ./symfony sql:execute --dir-depth=*
Example
This is your file "00-procedures.sql" content (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';
- Now, setup your DBMS conntecion in config/databases.yml (if you haven't done this yet)
- And execute this procedures in development environment:
symfony sql:execute --env=dev --file=data/sql/00-procedures.sql
- After you run this task, you should get the following output:
>> 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
Unit test
- Unit tests (14 of 14) successfully completed.
- Tested with:
MySQL 5.0.84
MySQL 5.1.40
PostgreSQL 8.3.8