diff options
Diffstat (limited to 'src/Fragments')
-rw-r--r-- | src/Fragments/AlterFragment.php | 2 | ||||
-rw-r--r-- | src/Fragments/FieldDefFragment.php | 1 | ||||
-rw-r--r-- | src/Fragments/IntoKeyword.php | 18 | ||||
-rw-r--r-- | src/Fragments/ParamDefFragment.php | 21 | ||||
-rw-r--r-- | src/Fragments/RenameKeyword.php | 28 | ||||
-rw-r--r-- | src/Fragments/SetKeyword.php | 9 |
6 files changed, 64 insertions, 15 deletions
diff --git a/src/Fragments/AlterFragment.php b/src/Fragments/AlterFragment.php index 54338f9..b5c66e8 100644 --- a/src/Fragments/AlterFragment.php +++ b/src/Fragments/AlterFragment.php @@ -160,7 +160,7 @@ class AlterFragment extends Fragment ); if ($ret->field === null) { // No field was read. We go back one token so the next - // iteration will parse the same on, but in state 2. + // iteration will parse the same token, but in state 2. --$list->idx; } $state = 2; diff --git a/src/Fragments/FieldDefFragment.php b/src/Fragments/FieldDefFragment.php index 9f43fcc..a4c21d7 100644 --- a/src/Fragments/FieldDefFragment.php +++ b/src/Fragments/FieldDefFragment.php @@ -221,7 +221,6 @@ class FieldDefFragment extends Fragment --$list->idx; return $ret; - } /** diff --git a/src/Fragments/IntoKeyword.php b/src/Fragments/IntoKeyword.php index 0b51531..cf65da6 100644 --- a/src/Fragments/IntoKeyword.php +++ b/src/Fragments/IntoKeyword.php @@ -33,11 +33,11 @@ class IntoKeyword extends Fragment public $type; /** - * The name of the table or file. + * The destination, which can be a table or a file. * - * @var string + * @var string|FieldFragment */ - public $name; + public $dest; /** * The name of the columns. @@ -102,7 +102,15 @@ class IntoKeyword extends Fragment } if ($state === 0) { - $ret->name = $token->value; + $ret->dest = FieldFragment::parse( + $parser, + $list, + array( + 'noAlias' => true, + 'noBrackets' => true, + 'skipColumn' => true, + ) + ); $state = 1; } elseif ($state === 1) { if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '(')) { @@ -111,7 +119,7 @@ class IntoKeyword extends Fragment } break; } elseif ($state === 2) { - $ret->name = $token->value; + $ret->dest = $token->value; ++$list->idx; break; } diff --git a/src/Fragments/ParamDefFragment.php b/src/Fragments/ParamDefFragment.php index 583c3ab..23b84e3 100644 --- a/src/Fragments/ParamDefFragment.php +++ b/src/Fragments/ParamDefFragment.php @@ -135,6 +135,27 @@ class ParamDefFragment extends Fragment --$list->idx; return $ret; + } + /** + * @param ParamDefFragment[] $fragment The fragment to be built. + * + * @return string + */ + public static function build($fragment) + { + $ret = array(); + foreach ($fragment as $f) { + $tmp = ''; + if (!empty($f->inOut)) { + $tmp .= $f->inOut . ' '; + } + + $ret[] = trim( + $tmp . Context::escape($f->name) . ' ' . + DataTypeFragment::build($f->type) + ); + } + return '(' . implode(', ', $ret) . ')'; } } diff --git a/src/Fragments/RenameKeyword.php b/src/Fragments/RenameKeyword.php index 077982a..de81848 100644 --- a/src/Fragments/RenameKeyword.php +++ b/src/Fragments/RenameKeyword.php @@ -26,16 +26,16 @@ class RenameKeyword extends Fragment { /** - * The old name. + * The old table name. * - * @var string + * @var FieldFragment */ public $old; /** - * The new name. + * The new table name. * - * @var string + * @var FieldFragment */ public $new; @@ -110,10 +110,26 @@ class RenameKeyword extends Fragment } if ($state == 0) { - $expr->old = $token->value; + $expr->old = FieldFragment::parse( + $parser, + $list, + array( + 'noAlias' => true, + 'noBrackets' => true, + 'skipColumn' => true, + ) + ); $state = 1; } elseif ($state == 2) { - $expr->new = $token->value; + $expr->new = FieldFragment::parse( + $parser, + $list, + array( + 'noBrackets' => true, + 'skipColumn' => true, + 'noAlias' => true, + ) + ); $state = 3; } diff --git a/src/Fragments/SetKeyword.php b/src/Fragments/SetKeyword.php index bced45f..713a179 100644 --- a/src/Fragments/SetKeyword.php +++ b/src/Fragments/SetKeyword.php @@ -90,24 +90,29 @@ class SetKeyword extends Fragment if ($token->type === Token::TYPE_OPERATOR) { if ($token->value === ',') { + $expr->column = trim($expr->column); + $expr->value = trim($expr->value); $ret[] = $expr; $expr = new SetKeyword(); $state = 0; continue; } elseif ($token->value === '=') { $state = 1; + continue; } } if ($state === 0) { - $expr->column .= $token->value; + $expr->column .= $token->token; } else { // } else if ($state === 1) { - $expr->value = $token->value; + $expr->value .= $token->token; } } // Last iteration was not saved. if (!empty($expr->column)) { + $expr->column = trim($expr->column); + $expr->value = trim($expr->value); $ret[] = $expr; } |