summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Components/JoinKeyword.php14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/Components/JoinKeyword.php b/src/Components/JoinKeyword.php
index d8e6ee9..3bbb37c 100644
--- a/src/Components/JoinKeyword.php
+++ b/src/Components/JoinKeyword.php
@@ -62,6 +62,7 @@ class JoinKeyword extends Component
* @var Condition[]
*/
public $on;
+ public $using;
/**
* @param Parser $parser The parser that serves as context.
@@ -85,10 +86,12 @@ class JoinKeyword extends Component
*
* 1 -----------------------[ expr ]----------------------> 2
*
- * 2 ------------------------[ ON ]-----------------------> 3
+ * 2 ---------------------[ ON|USING ]--------------------> 3/4
*
* 3 --------------------[ conditions ]-------------------> 0
*
+ * 4 ----------------------[ columns ]--------------------> 0
+ *
* @var int $state
*/
$state = 0;
@@ -131,14 +134,19 @@ class JoinKeyword extends Component
$expr->expr = Expression::parse($parser, $list, array('field' => 'table'));
$state = 2;
} elseif ($state === 2) {
- if (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'ON')) {
- $state = 3;
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'ON' || $token->value === 'USING')) {
+ $state = $token->value === 'ON' ? 3 : 4;
}
} elseif ($state === 3) {
$expr->on = Condition::parse($parser, $list);
$ret[] = $expr;
$expr = new JoinKeyword();
$state = 0;
+ } elseif ($state === 4) {
+ $expr->using = ArrayObj::parse($parser, $list);
+ $ret[] = $expr;
+ $expr = new JoinKeyword();
+ $state = 0;
}
}