Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 43 additions & 13 deletions src/Statements/CreateStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -219,21 +219,50 @@ class CreateStatement extends Statement
* @var array
*/
public static $FUNC_OPTIONS = array(
'COMMENT' => array(
1,
'NOT' => array(
2,
'var',
),
'FUNCTION' => array(
3,
'var=',
),
'LANGUAGE SQL' => 2,
'DETERMINISTIC' => 3,
'NOT DETERMINISTIC' => 3,
'CONTAINS SQL' => 4,
'NO SQL' => 4,
'READS SQL DATA' => 4,
'MODIFIES SQL DATA' => 4,
'SQL SECURITY DEFINER' => array(
5,
'PROCEDURE' => array(
3,
'var=',
),
'CONTAINS' => array(
4,
'expr',
),
'NO' => array(
4,
'var',
)
),
'READS' => array(
4,
'var',
),
'MODIFIES' => array(
4,
'expr',
),
'SQL SECURITY' => array(
6,
'var',
),
'LANGUAGE' => array(
7,
'var',
),
'COMMENT' => array(
8,
'var',
),

'CREATE' => 1,
'DETERMINISTIC' => 2,
'DATA' => 5,
);

/**
Expand Down Expand Up @@ -451,7 +480,8 @@ public function build()
. OptionsArray::build($this->options) . ' '
. Expression::build($this->name) . ' '
. ParameterDefinition::build($this->parameters) . ' '
. $tmp . ' ' . TokensList::build($this->body);
. $tmp . ' ' . OptionsArray::build($this->entityOptions) . ' '
. TokensList::build($this->body);
}

return 'CREATE '
Expand Down
29 changes: 13 additions & 16 deletions tests/Builder/CreateStatementTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -412,9 +412,8 @@ public function testBuilderCreateProcedure()
$stmt->build()
);

$this->assertTrue($stmt->entityOptions->isEmpty());
$this->assertFalse($stmt->entityOptions->isEmpty());
$this->assertFalse($stmt->options->isEmpty());

$this->assertSame(
'DEFINER=`root`@`%` PROCEDURE',
$stmt->options->__toString()
Expand All @@ -431,12 +430,12 @@ public function testBuilderCreateProcedure()
);

$this->assertSame(
'',
'NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER',
$stmt->entityOptions->__toString()
);

$this->assertSame(
'NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var',
'SELECT _var',
TokensList::build($stmt->body)
);
}
Expand All @@ -446,9 +445,9 @@ public function testBuilderCreateFunction()
$parser = new Parser(
'CREATE DEFINER=`root`@`localhost`'
. ' FUNCTION `inventory_in_stock`(`p_inventory_id` INT) RETURNS tinyint(1)'
. ' READS SQL DATA' . "\n"
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
. 'BEGIN' . "\n"
. ' READS SQL DATA'
. ' COMMENT \'My best function written by a friend\'\'s friend\''
. ' BEGIN' . "\n"
. ' DECLARE v_rentals INT;' . "\n"
. ' DECLARE v_out INT;' . "\n"
. "\n"
Expand Down Expand Up @@ -482,9 +481,9 @@ public function testBuilderCreateFunction()
$this->assertSame(
'CREATE DEFINER=`root`@`localhost`'
. ' FUNCTION `inventory_in_stock` (`p_inventory_id` INT) RETURNS TINYINT(1)'
. ' READS SQL DATA' . "\n"
Comment thread
williamdes marked this conversation as resolved.
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
. 'BEGIN' . "\n"
. ' READS SQL DATA'
. ' COMMENT \'My best function written by a friend\'\'s friend\''
. ' BEGIN' . "\n"
. ' DECLARE v_rentals INT;' . "\n"
. ' DECLARE v_out INT;' . "\n"
. "\n"
Expand Down Expand Up @@ -513,7 +512,7 @@ public function testBuilderCreateFunction()
$stmt->build()
);

$this->assertTrue($stmt->entityOptions->isEmpty());
$this->assertFalse($stmt->entityOptions->isEmpty());
$this->assertFalse($stmt->options->isEmpty());

$this->assertSame(
Expand All @@ -532,14 +531,12 @@ public function testBuilderCreateFunction()
);

$this->assertSame(
'',
'READS SQL DATA COMMENT \'My best function written by a friend\'\'s friend\'',
$stmt->entityOptions->__toString()
);

$this->assertSame(
'READS SQL DATA' . "\n"
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
. 'BEGIN' . "\n"
'BEGIN' . "\n"
. ' DECLARE v_rentals INT;' . "\n"
. ' DECLARE v_out INT;' . "\n"
. "\n"
Expand Down Expand Up @@ -600,7 +597,7 @@ public function testBuilderRoutine()

$this->assertEquals(
'CREATE FUNCTION test (IN `i` INT) RETURNS VARCHAR ' .
'BEGIN ' .
' BEGIN ' .
'DECLARE name VARCHAR DEFAULT ""; ' .
'SELECT name INTO name FROM employees WHERE id = i; ' .
'RETURN name; ' .
Expand Down
1 change: 1 addition & 0 deletions tests/Parser/AlterStatementTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public function alterProvider()
array('parser/parseAlterUser5'),
array('parser/parseAlterUser6'),
array('parser/parseAlterUser7'),
array('parser/parseAlterUser8'),
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch, I forgot to let you know I had patched it in: 1acb64c

);
}
}
2 changes: 1 addition & 1 deletion tests/data/parser/parseCreateProcedure1.in
Original file line number Diff line number Diff line change
@@ -1 +1 @@
CREATE DEFINER=`root`@`%` PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var
CREATE DEFINER=`root`@`%` PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER SELECT _var
Loading