summaryrefslogtreecommitdiffstats
path: root/src/Fragments
diff options
context:
space:
mode:
Diffstat (limited to 'src/Fragments')
-rw-r--r--src/Fragments/AlterFragment.php2
-rw-r--r--src/Fragments/FieldDefFragment.php1
-rw-r--r--src/Fragments/IntoKeyword.php18
-rw-r--r--src/Fragments/ParamDefFragment.php21
-rw-r--r--src/Fragments/RenameKeyword.php28
-rw-r--r--src/Fragments/SetKeyword.php9
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;
}