diff --git a/core/oql/expression.class.inc.php b/core/oql/expression.class.inc.php index 1aade4c1cf..dd9ed7036e 100644 --- a/core/oql/expression.class.inc.php +++ b/core/oql/expression.class.inc.php @@ -1946,20 +1946,24 @@ class NestedQueryExpression extends Expression return '('.$this->m_oNestedQuery->ToOQL(false, null, false).')'; } } + /*TODO*/ public function Browse(Closure $callback) { $callback($this); } + /**/ public function ApplyParameters($aArgs) { $this->m_oNestedQuery->ApplyParameters($aArgs); } + /**/ public function GetUnresolvedFields($sAlias, &$aUnresolved) { } + /**/ public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true) { @@ -1969,6 +1973,7 @@ class NestedQueryExpression extends Expression $this->m_oNestedQuery->AddConditionExpression($oExpression); return clone $this; } + /*TODO*/ public function ListRequiredFields() { @@ -1979,6 +1984,7 @@ class NestedQueryExpression extends Expression } return $aRes; } + /*TODO */ public function CollectUsedParents(&$aTable) { diff --git a/core/oql/oql-parser.php b/core/oql/oql-parser.php index aba1853d9d..d2f752da47 100644 --- a/core/oql/oql-parser.php +++ b/core/oql/oql-parser.php @@ -186,9 +186,9 @@ class OQLParserRaw#line 102 "..\oql-parser.php" const F_FLOOR = 73; const F_INET_ATON = 74; const F_INET_NTOA = 75; - const YY_NO_ACTION = 299; - const YY_ACCEPT_ACTION = 298; - const YY_ERROR_ACTION = 297; + const YY_NO_ACTION = 302; + const YY_ACCEPT_ACTION = 301; + const YY_ERROR_ACTION = 300; /* Next are that tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement @@ -240,149 +240,149 @@ class OQLParserRaw#line 102 "..\oql-parser.php" ** shifting non-terminals after a reduce. ** self::$yy_default Default action for each state. */ - const YY_SZ_ACTTAB = 584; + const YY_SZ_ACTTAB = 581; static public $yy_action = array( - /* 0 */ 25, 154, 140, 38, 182, 182, 9, 41, 46, 65, - /* 10 */ 45, 141, 142, 13, 41, 126, 6, 48, 125, 127, - /* 20 */ 67, 73, 166, 164, 157, 106, 2, 109, 108, 103, - /* 30 */ 63, 112, 113, 108, 119, 111, 118, 104, 105, 68, - /* 40 */ 26, 24, 20, 21, 28, 22, 19, 27, 23, 30, - /* 50 */ 44, 43, 60, 4, 114, 115, 116, 117, 136, 120, - /* 60 */ 137, 156, 158, 159, 160, 161, 162, 163, 167, 168, - /* 70 */ 169, 170, 171, 165, 6, 42, 5, 130, 11, 82, - /* 80 */ 166, 164, 157, 106, 10, 109, 108, 103, 63, 112, - /* 90 */ 113, 132, 133, 155, 147, 6, 122, 66, 76, 101, - /* 100 */ 143, 166, 164, 157, 106, 82, 109, 108, 103, 63, - /* 110 */ 112, 113, 114, 115, 116, 117, 136, 120, 137, 156, - /* 120 */ 158, 159, 160, 161, 162, 163, 167, 168, 169, 170, - /* 130 */ 171, 165, 79, 114, 115, 116, 117, 136, 120, 137, - /* 140 */ 156, 158, 159, 160, 161, 162, 163, 167, 168, 169, - /* 150 */ 170, 171, 165, 54, 135, 129, 40, 81, 298, 100, - /* 160 */ 62, 172, 65, 128, 71, 110, 39, 40, 126, 34, - /* 170 */ 49, 125, 127, 67, 12, 55, 57, 17, 40, 14, - /* 180 */ 8, 36, 130, 90, 50, 238, 123, 119, 111, 118, - /* 190 */ 104, 105, 68, 65, 89, 131, 132, 133, 64, 126, - /* 200 */ 31, 49, 125, 127, 67, 58, 82, 25, 17, 65, - /* 210 */ 14, 7, 36, 134, 80, 56, 97, 75, 119, 111, - /* 220 */ 118, 104, 105, 68, 61, 77, 65, 47, 82, 8, - /* 230 */ 37, 41, 126, 33, 49, 125, 127, 67, 1, 68, - /* 240 */ 107, 17, 51, 14, 131, 36, 53, 82, 59, 40, - /* 250 */ 72, 119, 111, 118, 104, 105, 68, 82, 124, 65, - /* 260 */ 82, 3, 244, 244, 74, 126, 34, 49, 125, 127, - /* 270 */ 67, 244, 244, 65, 17, 121, 14, 244, 36, 98, - /* 280 */ 52, 244, 244, 40, 119, 111, 118, 104, 105, 68, - /* 290 */ 65, 244, 244, 244, 244, 244, 126, 31, 49, 125, - /* 300 */ 127, 67, 244, 68, 244, 17, 65, 14, 244, 36, - /* 310 */ 244, 88, 56, 87, 244, 119, 111, 118, 104, 105, - /* 320 */ 68, 244, 244, 65, 244, 244, 244, 244, 244, 126, - /* 330 */ 29, 49, 125, 127, 67, 244, 68, 244, 17, 244, - /* 340 */ 14, 244, 36, 244, 244, 244, 244, 244, 119, 111, - /* 350 */ 118, 104, 105, 68, 244, 244, 65, 244, 244, 244, - /* 360 */ 244, 244, 126, 32, 49, 125, 127, 67, 244, 244, - /* 370 */ 65, 17, 244, 14, 244, 36, 70, 244, 244, 244, - /* 380 */ 244, 119, 111, 118, 104, 105, 68, 65, 244, 244, - /* 390 */ 244, 244, 244, 126, 16, 49, 125, 127, 67, 244, - /* 400 */ 68, 244, 17, 244, 14, 244, 36, 244, 244, 244, - /* 410 */ 244, 244, 119, 111, 118, 104, 105, 68, 244, 244, - /* 420 */ 65, 244, 244, 244, 244, 244, 126, 244, 49, 125, - /* 430 */ 127, 67, 244, 244, 244, 17, 244, 14, 244, 35, - /* 440 */ 244, 244, 244, 244, 244, 119, 111, 118, 104, 105, - /* 450 */ 68, 244, 244, 65, 244, 244, 244, 244, 244, 126, - /* 460 */ 244, 49, 125, 127, 67, 244, 244, 244, 17, 244, - /* 470 */ 15, 91, 92, 93, 94, 95, 96, 244, 119, 111, - /* 480 */ 118, 104, 105, 68, 65, 244, 244, 244, 130, 244, - /* 490 */ 126, 244, 49, 125, 127, 67, 244, 244, 65, 18, - /* 500 */ 145, 244, 132, 133, 78, 244, 244, 244, 244, 119, - /* 510 */ 111, 118, 104, 105, 68, 244, 244, 244, 244, 65, - /* 520 */ 244, 244, 244, 148, 244, 69, 144, 139, 68, 244, - /* 530 */ 244, 244, 146, 149, 150, 151, 152, 153, 138, 102, - /* 540 */ 244, 65, 244, 244, 65, 65, 65, 83, 244, 68, - /* 550 */ 86, 84, 85, 65, 244, 244, 244, 244, 244, 99, - /* 560 */ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, - /* 570 */ 244, 68, 244, 244, 68, 68, 68, 244, 244, 244, - /* 580 */ 244, 244, 244, 68, + /* 0 */ 28, 108, 40, 184, 184, 52, 39, 55, 42, 67, + /* 10 */ 42, 8, 122, 69, 92, 126, 5, 48, 125, 127, + /* 20 */ 63, 58, 167, 165, 158, 106, 131, 109, 108, 103, + /* 30 */ 65, 112, 113, 74, 119, 111, 118, 104, 105, 62, + /* 40 */ 23, 20, 22, 24, 26, 25, 27, 21, 19, 30, + /* 50 */ 4, 71, 60, 1, 114, 115, 116, 117, 137, 120, + /* 60 */ 138, 157, 159, 160, 161, 162, 163, 164, 168, 169, + /* 70 */ 170, 171, 172, 173, 5, 38, 7, 10, 134, 71, + /* 80 */ 167, 165, 158, 106, 130, 109, 108, 103, 65, 112, + /* 90 */ 113, 88, 143, 144, 42, 5, 107, 51, 132, 133, + /* 100 */ 42, 167, 165, 158, 106, 71, 109, 108, 103, 65, + /* 110 */ 112, 113, 114, 115, 116, 117, 137, 120, 138, 157, + /* 120 */ 159, 160, 161, 162, 163, 164, 168, 169, 170, 171, + /* 130 */ 172, 173, 241, 114, 115, 116, 117, 137, 120, 138, + /* 140 */ 157, 159, 160, 161, 162, 163, 164, 168, 169, 170, + /* 150 */ 171, 172, 173, 6, 110, 148, 155, 47, 301, 101, + /* 160 */ 66, 174, 67, 9, 128, 141, 142, 75, 126, 31, + /* 170 */ 49, 125, 127, 63, 13, 135, 47, 17, 79, 14, + /* 180 */ 67, 36, 37, 130, 11, 53, 91, 119, 111, 118, + /* 190 */ 104, 105, 62, 68, 61, 73, 67, 132, 133, 166, + /* 200 */ 156, 64, 126, 32, 49, 125, 127, 63, 90, 41, + /* 210 */ 62, 17, 71, 14, 12, 36, 2, 70, 57, 136, + /* 220 */ 129, 119, 111, 118, 104, 105, 62, 67, 45, 43, + /* 230 */ 44, 71, 72, 126, 33, 49, 125, 127, 63, 59, + /* 240 */ 39, 67, 17, 67, 14, 245, 36, 89, 99, 56, + /* 250 */ 93, 123, 119, 111, 118, 104, 105, 62, 124, 67, + /* 260 */ 71, 50, 71, 3, 42, 126, 31, 49, 125, 127, + /* 270 */ 63, 62, 28, 62, 17, 67, 14, 121, 36, 46, + /* 280 */ 77, 56, 80, 39, 119, 111, 118, 104, 105, 62, + /* 290 */ 54, 8, 245, 67, 245, 245, 78, 245, 245, 126, + /* 300 */ 33, 49, 125, 127, 63, 62, 131, 67, 17, 245, + /* 310 */ 14, 245, 36, 84, 245, 245, 81, 245, 119, 111, + /* 320 */ 118, 104, 105, 62, 67, 245, 245, 245, 245, 245, + /* 330 */ 126, 16, 49, 125, 127, 63, 245, 62, 67, 17, + /* 340 */ 67, 14, 245, 36, 100, 245, 85, 245, 245, 119, + /* 350 */ 111, 118, 104, 105, 62, 245, 67, 245, 245, 245, + /* 360 */ 245, 245, 126, 29, 49, 125, 127, 63, 62, 245, + /* 370 */ 62, 17, 245, 14, 245, 36, 245, 245, 245, 245, + /* 380 */ 245, 119, 111, 118, 104, 105, 62, 245, 245, 245, + /* 390 */ 67, 245, 245, 245, 245, 245, 126, 34, 49, 125, + /* 400 */ 127, 63, 245, 245, 67, 17, 245, 14, 245, 36, + /* 410 */ 87, 245, 245, 245, 245, 119, 111, 118, 104, 105, + /* 420 */ 62, 67, 67, 245, 245, 245, 245, 126, 83, 49, + /* 430 */ 125, 127, 63, 245, 62, 67, 17, 245, 14, 245, + /* 440 */ 35, 86, 245, 245, 245, 245, 119, 111, 118, 104, + /* 450 */ 105, 62, 62, 67, 245, 245, 245, 245, 245, 126, + /* 460 */ 245, 49, 125, 127, 63, 62, 245, 245, 17, 245, + /* 470 */ 15, 245, 245, 245, 245, 245, 245, 245, 119, 111, + /* 480 */ 118, 104, 105, 62, 245, 245, 245, 67, 245, 245, + /* 490 */ 245, 245, 245, 126, 245, 49, 125, 127, 63, 245, + /* 500 */ 245, 67, 18, 146, 245, 245, 245, 76, 245, 245, + /* 510 */ 245, 245, 119, 111, 118, 104, 105, 62, 245, 245, + /* 520 */ 245, 245, 245, 245, 245, 245, 149, 245, 245, 145, + /* 530 */ 140, 62, 245, 245, 245, 147, 150, 151, 152, 153, + /* 540 */ 154, 139, 102, 245, 245, 245, 245, 245, 82, 98, + /* 550 */ 97, 96, 95, 94, 245, 245, 245, 245, 245, 245, + /* 560 */ 245, 245, 245, 245, 245, 130, 245, 245, 245, 245, + /* 570 */ 245, 245, 245, 245, 245, 245, 245, 245, 245, 132, + /* 580 */ 133, ); static public $yy_lookahead = array( - /* 0 */ 2, 39, 40, 3, 4, 5, 101, 7, 3, 81, - /* 10 */ 3, 49, 50, 8, 7, 87, 18, 89, 90, 91, - /* 20 */ 92, 116, 24, 25, 26, 27, 18, 29, 30, 31, - /* 30 */ 32, 33, 34, 30, 106, 107, 108, 109, 110, 111, + /* 0 */ 2, 30, 3, 4, 5, 82, 7, 82, 85, 81, + /* 10 */ 85, 102, 78, 79, 105, 87, 18, 89, 90, 91, + /* 20 */ 92, 81, 24, 25, 26, 27, 117, 29, 30, 31, + /* 30 */ 32, 33, 34, 83, 106, 107, 108, 109, 110, 111, /* 40 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 81, - /* 50 */ 4, 5, 84, 6, 56, 57, 58, 59, 60, 61, + /* 50 */ 6, 111, 84, 18, 56, 57, 58, 59, 60, 61, /* 60 */ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - /* 70 */ 72, 73, 74, 75, 18, 81, 20, 38, 97, 111, - /* 80 */ 24, 25, 26, 27, 99, 29, 30, 31, 32, 33, - /* 90 */ 34, 52, 53, 112, 113, 18, 78, 79, 83, 114, - /* 100 */ 115, 24, 25, 26, 27, 111, 29, 30, 31, 32, + /* 70 */ 72, 73, 74, 75, 18, 81, 20, 99, 95, 111, + /* 80 */ 24, 25, 26, 27, 38, 29, 30, 31, 32, 33, + /* 90 */ 34, 82, 114, 115, 85, 18, 111, 82, 52, 53, + /* 100 */ 85, 24, 25, 26, 27, 111, 29, 30, 31, 32, /* 110 */ 33, 34, 56, 57, 58, 59, 60, 61, 62, 63, /* 120 */ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - /* 130 */ 74, 75, 83, 56, 57, 58, 59, 60, 61, 62, + /* 130 */ 74, 75, 28, 56, 57, 58, 59, 60, 61, 62, /* 140 */ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - /* 150 */ 73, 74, 75, 82, 54, 55, 85, 19, 77, 78, - /* 160 */ 79, 80, 81, 19, 82, 31, 1, 85, 87, 88, - /* 170 */ 89, 90, 91, 92, 8, 82, 81, 96, 85, 98, - /* 180 */ 102, 100, 38, 105, 28, 28, 83, 106, 107, 108, - /* 190 */ 109, 110, 111, 81, 83, 117, 52, 53, 81, 87, - /* 200 */ 88, 89, 90, 91, 92, 93, 111, 2, 96, 81, - /* 210 */ 98, 5, 100, 95, 86, 87, 104, 81, 106, 107, - /* 220 */ 108, 109, 110, 111, 79, 19, 81, 81, 111, 102, - /* 230 */ 81, 7, 87, 88, 89, 90, 91, 92, 18, 111, - /* 240 */ 111, 96, 94, 98, 117, 100, 82, 111, 103, 85, - /* 250 */ 37, 106, 107, 108, 109, 110, 111, 111, 80, 81, - /* 260 */ 111, 5, 118, 118, 51, 87, 88, 89, 90, 91, - /* 270 */ 92, 118, 118, 81, 96, 19, 98, 118, 100, 87, - /* 280 */ 82, 118, 118, 85, 106, 107, 108, 109, 110, 111, - /* 290 */ 81, 118, 118, 118, 118, 118, 87, 88, 89, 90, - /* 300 */ 91, 92, 118, 111, 118, 96, 81, 98, 118, 100, - /* 310 */ 118, 86, 87, 104, 118, 106, 107, 108, 109, 110, - /* 320 */ 111, 118, 118, 81, 118, 118, 118, 118, 118, 87, - /* 330 */ 88, 89, 90, 91, 92, 118, 111, 118, 96, 118, - /* 340 */ 98, 118, 100, 118, 118, 118, 118, 118, 106, 107, - /* 350 */ 108, 109, 110, 111, 118, 118, 81, 118, 118, 118, - /* 360 */ 118, 118, 87, 88, 89, 90, 91, 92, 118, 118, - /* 370 */ 81, 96, 118, 98, 118, 100, 87, 118, 118, 118, - /* 380 */ 118, 106, 107, 108, 109, 110, 111, 81, 118, 118, - /* 390 */ 118, 118, 118, 87, 88, 89, 90, 91, 92, 118, - /* 400 */ 111, 118, 96, 118, 98, 118, 100, 118, 118, 118, - /* 410 */ 118, 118, 106, 107, 108, 109, 110, 111, 118, 118, - /* 420 */ 81, 118, 118, 118, 118, 118, 87, 118, 89, 90, - /* 430 */ 91, 92, 118, 118, 118, 96, 118, 98, 118, 100, - /* 440 */ 118, 118, 118, 118, 118, 106, 107, 108, 109, 110, - /* 450 */ 111, 118, 118, 81, 118, 118, 118, 118, 118, 87, - /* 460 */ 118, 89, 90, 91, 92, 118, 118, 118, 96, 118, - /* 470 */ 98, 21, 22, 23, 24, 25, 26, 118, 106, 107, - /* 480 */ 108, 109, 110, 111, 81, 118, 118, 118, 38, 118, - /* 490 */ 87, 118, 89, 90, 91, 92, 118, 118, 81, 96, - /* 500 */ 9, 118, 52, 53, 87, 118, 118, 118, 118, 106, - /* 510 */ 107, 108, 109, 110, 111, 118, 118, 118, 118, 81, - /* 520 */ 118, 118, 118, 32, 118, 87, 35, 36, 111, 118, - /* 530 */ 118, 118, 41, 42, 43, 44, 45, 46, 47, 48, - /* 540 */ 118, 81, 118, 118, 81, 81, 81, 87, 118, 111, - /* 550 */ 87, 87, 87, 81, 118, 118, 118, 118, 118, 87, - /* 560 */ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - /* 570 */ 118, 111, 118, 118, 111, 111, 111, 118, 118, 118, - /* 580 */ 118, 118, 118, 111, + /* 150 */ 73, 74, 75, 5, 31, 39, 40, 1, 77, 78, + /* 160 */ 79, 80, 81, 101, 19, 49, 50, 19, 87, 88, + /* 170 */ 89, 90, 91, 92, 8, 19, 1, 96, 116, 98, + /* 180 */ 81, 100, 81, 38, 97, 28, 87, 106, 107, 108, + /* 190 */ 109, 110, 111, 78, 79, 19, 81, 52, 53, 112, + /* 200 */ 113, 81, 87, 88, 89, 90, 91, 92, 83, 3, + /* 210 */ 111, 96, 111, 98, 8, 100, 18, 83, 103, 54, + /* 220 */ 55, 106, 107, 108, 109, 110, 111, 81, 4, 5, + /* 230 */ 81, 111, 81, 87, 88, 89, 90, 91, 92, 93, + /* 240 */ 7, 81, 96, 81, 98, 118, 100, 87, 86, 87, + /* 250 */ 104, 83, 106, 107, 108, 109, 110, 111, 80, 81, + /* 260 */ 111, 82, 111, 5, 85, 87, 88, 89, 90, 91, + /* 270 */ 92, 111, 2, 111, 96, 81, 98, 19, 100, 3, + /* 280 */ 86, 87, 37, 7, 106, 107, 108, 109, 110, 111, + /* 290 */ 94, 102, 118, 81, 118, 118, 51, 118, 118, 87, + /* 300 */ 88, 89, 90, 91, 92, 111, 117, 81, 96, 118, + /* 310 */ 98, 118, 100, 87, 118, 118, 104, 118, 106, 107, + /* 320 */ 108, 109, 110, 111, 81, 118, 118, 118, 118, 118, + /* 330 */ 87, 88, 89, 90, 91, 92, 118, 111, 81, 96, + /* 340 */ 81, 98, 118, 100, 87, 118, 87, 118, 118, 106, + /* 350 */ 107, 108, 109, 110, 111, 118, 81, 118, 118, 118, + /* 360 */ 118, 118, 87, 88, 89, 90, 91, 92, 111, 118, + /* 370 */ 111, 96, 118, 98, 118, 100, 118, 118, 118, 118, + /* 380 */ 118, 106, 107, 108, 109, 110, 111, 118, 118, 118, + /* 390 */ 81, 118, 118, 118, 118, 118, 87, 88, 89, 90, + /* 400 */ 91, 92, 118, 118, 81, 96, 118, 98, 118, 100, + /* 410 */ 87, 118, 118, 118, 118, 106, 107, 108, 109, 110, + /* 420 */ 111, 81, 81, 118, 118, 118, 118, 87, 87, 89, + /* 430 */ 90, 91, 92, 118, 111, 81, 96, 118, 98, 118, + /* 440 */ 100, 87, 118, 118, 118, 118, 106, 107, 108, 109, + /* 450 */ 110, 111, 111, 81, 118, 118, 118, 118, 118, 87, + /* 460 */ 118, 89, 90, 91, 92, 111, 118, 118, 96, 118, + /* 470 */ 98, 118, 118, 118, 118, 118, 118, 118, 106, 107, + /* 480 */ 108, 109, 110, 111, 118, 118, 118, 81, 118, 118, + /* 490 */ 118, 118, 118, 87, 118, 89, 90, 91, 92, 118, + /* 500 */ 118, 81, 96, 9, 118, 118, 118, 87, 118, 118, + /* 510 */ 118, 118, 106, 107, 108, 109, 110, 111, 118, 118, + /* 520 */ 118, 118, 118, 118, 118, 118, 32, 118, 118, 35, + /* 530 */ 36, 111, 118, 118, 118, 41, 42, 43, 44, 45, + /* 540 */ 46, 47, 48, 118, 118, 118, 118, 118, 21, 22, + /* 550 */ 23, 24, 25, 26, 118, 118, 118, 118, 118, 118, + /* 560 */ 118, 118, 118, 118, 118, 38, 118, 118, 118, 118, + /* 570 */ 118, 118, 118, 118, 118, 118, 118, 118, 118, 52, + /* 580 */ 53, ); - const YY_SHIFT_USE_DFLT = -39; - const YY_SHIFT_MAX = 68; + const YY_SHIFT_USE_DFLT = -30; + const YY_SHIFT_MAX = 69; static public $yy_shift_ofst = array( /* 0 */ -2, -2, 56, 56, 77, 77, 77, 77, 77, 77, - /* 10 */ 77, 77, 3, 3, 491, 491, 450, -38, -38, 3, - /* 20 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 144, - /* 30 */ 0, 39, 39, 39, 39, 213, 213, 7, 3, 205, - /* 40 */ 224, 3, 224, 3, 3, 3, 3, 224, 100, 100, - /* 50 */ 3, 220, 47, 47, 47, 47, 31, 5, 256, 206, - /* 60 */ 46, 138, 165, 134, 166, 156, 165, 8, 157, + /* 10 */ 77, 77, -29, -29, 494, 494, 527, 116, 116, -29, + /* 20 */ -29, -29, -29, -29, -29, -29, -29, -29, -29, 145, + /* 30 */ -1, 46, 46, 46, 46, 245, 245, 276, 233, -29, + /* 40 */ -29, -29, 233, -29, 233, -29, -29, 270, 165, 165, + /* 50 */ 44, 44, 44, -29, 35, 44, 31, 148, 206, 258, + /* 60 */ 224, 156, 104, 198, 166, 123, 175, 157, 176, 175, ); - const YY_REDUCE_USE_DFLT = -96; + const YY_REDUCE_USE_DFLT = -92; const YY_REDUCE_MAX = 55; static public $yy_reduce_ofst = array( - /* 0 */ 81, 145, 112, 209, 178, 306, 242, 275, 339, 372, - /* 10 */ 403, -72, 225, 128, -15, -15, 78, -19, -19, 464, - /* 20 */ 465, 472, 463, 460, 438, -32, 417, 289, 192, 127, - /* 30 */ 198, 127, 127, 127, 127, -95, -95, 71, -6, 18, - /* 40 */ 82, 95, 93, 136, 149, 146, 117, 164, 148, 148, - /* 50 */ 129, 118, 103, 15, 49, 111, + /* 0 */ 81, 115, 146, 212, 178, 275, 309, 243, 340, 372, + /* 10 */ 406, -72, 194, 162, -22, -22, -91, 87, 87, 420, + /* 20 */ 354, 341, 323, 259, 257, 226, 160, 99, -32, 189, + /* 30 */ 179, 189, 189, 189, 189, 62, 62, -75, -77, -60, + /* 40 */ -6, 120, 9, 151, 15, 101, 149, -66, 196, 196, + /* 50 */ 168, 134, 125, -15, -17, -50, ); static public $yyExpectedTokens = array( /* 0 */ array(2, 18, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, ), @@ -423,38 +423,38 @@ static public $yy_action = array( /* 35 */ array(37, 51, ), /* 36 */ array(37, 51, ), /* 37 */ array(3, 7, ), - /* 38 */ array(30, ), - /* 39 */ array(2, ), - /* 40 */ array(7, ), + /* 38 */ array(7, ), + /* 39 */ array(30, ), + /* 40 */ array(30, ), /* 41 */ array(30, ), /* 42 */ array(7, ), /* 43 */ array(30, ), - /* 44 */ array(30, ), + /* 44 */ array(7, ), /* 45 */ array(30, ), /* 46 */ array(30, ), - /* 47 */ array(7, ), + /* 47 */ array(2, ), /* 48 */ array(54, 55, ), /* 49 */ array(54, 55, ), - /* 50 */ array(30, ), - /* 51 */ array(18, ), + /* 50 */ array(6, ), + /* 51 */ array(6, ), /* 52 */ array(6, ), - /* 53 */ array(6, ), - /* 54 */ array(6, ), + /* 53 */ array(30, ), + /* 54 */ array(18, ), /* 55 */ array(6, ), /* 56 */ array(9, 10, 11, 12, 13, 14, 15, 16, 17, ), - /* 57 */ array(3, 8, ), - /* 58 */ array(5, 19, ), + /* 57 */ array(5, 19, ), + /* 58 */ array(3, 8, ), /* 59 */ array(5, 19, ), /* 60 */ array(4, 5, ), - /* 61 */ array(19, ), - /* 62 */ array(1, ), - /* 63 */ array(31, ), + /* 61 */ array(1, 19, ), + /* 62 */ array(28, ), + /* 63 */ array(18, ), /* 64 */ array(8, ), - /* 65 */ array(28, ), + /* 65 */ array(31, ), /* 66 */ array(1, ), - /* 67 */ array(18, ), - /* 68 */ array(28, ), - /* 69 */ array(), + /* 67 */ array(28, ), + /* 68 */ array(19, ), + /* 69 */ array(1, ), /* 70 */ array(), /* 71 */ array(), /* 72 */ array(), @@ -558,26 +558,28 @@ static public $yy_action = array( /* 170 */ array(), /* 171 */ array(), /* 172 */ array(), + /* 173 */ array(), + /* 174 */ array(), ); static public $yy_default = array( - /* 0 */ 297, 297, 219, 297, 297, 297, 297, 297, 297, 297, - /* 10 */ 297, 297, 297, 297, 211, 212, 297, 209, 210, 297, - /* 20 */ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - /* 30 */ 188, 222, 218, 217, 200, 214, 213, 188, 297, 297, - /* 40 */ 187, 297, 188, 297, 297, 297, 297, 188, 208, 207, - /* 50 */ 297, 297, 185, 185, 185, 185, 297, 297, 297, 297, - /* 60 */ 297, 297, 174, 297, 297, 297, 176, 297, 236, 192, - /* 70 */ 198, 186, 252, 253, 269, 183, 181, 215, 191, 180, - /* 80 */ 190, 216, 238, 199, 197, 193, 196, 221, 189, 179, - /* 90 */ 223, 224, 225, 226, 227, 228, 229, 220, 195, 194, - /* 100 */ 173, 247, 266, 241, 233, 234, 235, 237, 240, 239, - /* 110 */ 242, 231, 243, 244, 274, 275, 276, 277, 232, 230, - /* 120 */ 279, 204, 177, 178, 184, 201, 202, 203, 205, 273, - /* 130 */ 254, 255, 270, 271, 206, 272, 278, 280, 265, 251, - /* 140 */ 257, 267, 268, 248, 249, 250, 258, 246, 259, 260, - /* 150 */ 261, 262, 263, 264, 256, 245, 281, 288, 282, 283, - /* 160 */ 284, 285, 286, 287, 289, 296, 290, 291, 292, 293, - /* 170 */ 294, 295, 175, + /* 0 */ 300, 300, 222, 300, 300, 300, 300, 300, 300, 300, + /* 10 */ 300, 300, 300, 300, 213, 214, 300, 211, 212, 300, + /* 20 */ 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + /* 30 */ 190, 202, 220, 225, 221, 216, 215, 190, 190, 300, + /* 40 */ 300, 300, 189, 300, 190, 300, 300, 300, 210, 209, + /* 50 */ 187, 187, 187, 300, 300, 187, 300, 300, 300, 300, + /* 60 */ 300, 300, 239, 300, 300, 300, 176, 300, 300, 178, + /* 70 */ 183, 241, 185, 219, 182, 217, 201, 192, 272, 256, + /* 80 */ 255, 224, 227, 200, 198, 193, 194, 195, 188, 197, + /* 90 */ 181, 199, 226, 223, 232, 231, 230, 229, 228, 191, + /* 100 */ 196, 175, 269, 244, 236, 237, 238, 240, 243, 242, + /* 110 */ 245, 234, 246, 247, 277, 278, 279, 280, 235, 233, + /* 120 */ 282, 206, 179, 180, 186, 203, 204, 205, 207, 276, + /* 130 */ 257, 258, 273, 274, 208, 218, 275, 281, 283, 268, + /* 140 */ 254, 270, 271, 250, 251, 252, 253, 261, 259, 262, + /* 150 */ 263, 264, 265, 266, 267, 260, 249, 284, 291, 285, + /* 160 */ 286, 287, 288, 289, 290, 292, 248, 293, 294, 295, + /* 170 */ 296, 297, 298, 299, 177, ); /* The next thing included is series of defines which control ** various aspects of the generated parser. @@ -596,8 +598,8 @@ static public $yy_action = array( */ const YYNOCODE = 119; const YYSTACKDEPTH = 100; - const YYNSTATE = 173; - const YYNRULE = 124; + const YYNSTATE = 175; + const YYNRULE = 125; const YYERRORSYMBOL = 76; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; @@ -761,86 +763,87 @@ static public $yy_action = array( /* 41 */ "expression_prio4 ::= expression_prio4 operator4 expression_prio3", /* 42 */ "list ::= PAR_OPEN list_items PAR_CLOSE", /* 43 */ "list ::= PAR_OPEN query PAR_CLOSE", - /* 44 */ "list_items ::= expression_prio4", - /* 45 */ "list_items ::= list_items COMA expression_prio4", - /* 46 */ "arg_list ::=", - /* 47 */ "arg_list ::= argument", - /* 48 */ "arg_list ::= arg_list COMA argument", - /* 49 */ "argument ::= expression_prio4", - /* 50 */ "argument ::= INTERVAL expression_prio4 interval_unit", - /* 51 */ "interval_unit ::= F_SECOND", - /* 52 */ "interval_unit ::= F_MINUTE", - /* 53 */ "interval_unit ::= F_HOUR", - /* 54 */ "interval_unit ::= F_DAY", - /* 55 */ "interval_unit ::= F_MONTH", - /* 56 */ "interval_unit ::= F_YEAR", - /* 57 */ "scalar ::= num_scalar", - /* 58 */ "scalar ::= str_scalar", - /* 59 */ "scalar ::= null_scalar", - /* 60 */ "num_scalar ::= num_value", - /* 61 */ "str_scalar ::= str_value", - /* 62 */ "null_scalar ::= NULL_VAL", - /* 63 */ "field_id ::= name", - /* 64 */ "field_id ::= class_name DOT name", - /* 65 */ "class_name ::= name", - /* 66 */ "var_name ::= VARNAME", - /* 67 */ "name ::= NAME", - /* 68 */ "num_value ::= NUMVAL", - /* 69 */ "num_value ::= MATH_MINUS NUMVAL", - /* 70 */ "num_value ::= HEXVAL", - /* 71 */ "str_value ::= STRVAL", - /* 72 */ "operator1 ::= num_operator1", - /* 73 */ "operator1 ::= bitwise_operator1", - /* 74 */ "operator2 ::= num_operator2", - /* 75 */ "operator2 ::= str_operator", - /* 76 */ "operator2 ::= REGEXP", - /* 77 */ "operator2 ::= EQ", - /* 78 */ "operator2 ::= NOT_EQ", - /* 79 */ "operator3 ::= LOG_AND", - /* 80 */ "operator3 ::= bitwise_operator3", - /* 81 */ "operator4 ::= LOG_OR", - /* 82 */ "operator4 ::= bitwise_operator4", - /* 83 */ "num_operator1 ::= MATH_DIV", - /* 84 */ "num_operator1 ::= MATH_MULT", - /* 85 */ "num_operator2 ::= MATH_PLUS", - /* 86 */ "num_operator2 ::= MATH_MINUS", - /* 87 */ "num_operator2 ::= GT", - /* 88 */ "num_operator2 ::= LT", - /* 89 */ "num_operator2 ::= GE", - /* 90 */ "num_operator2 ::= LE", - /* 91 */ "str_operator ::= LIKE", - /* 92 */ "str_operator ::= NOT_LIKE", - /* 93 */ "str_operator ::= MATCHES", - /* 94 */ "bitwise_operator1 ::= BITWISE_LEFT_SHIFT", - /* 95 */ "bitwise_operator1 ::= BITWISE_RIGHT_SHIFT", - /* 96 */ "bitwise_operator3 ::= BITWISE_AND", - /* 97 */ "bitwise_operator4 ::= BITWISE_OR", - /* 98 */ "bitwise_operator4 ::= BITWISE_XOR", - /* 99 */ "list_operator ::= IN", - /* 100 */ "list_operator ::= NOT_IN", - /* 101 */ "func_name ::= F_IF", - /* 102 */ "func_name ::= F_ELT", - /* 103 */ "func_name ::= F_COALESCE", - /* 104 */ "func_name ::= F_ISNULL", - /* 105 */ "func_name ::= F_CONCAT", - /* 106 */ "func_name ::= F_SUBSTR", - /* 107 */ "func_name ::= F_TRIM", - /* 108 */ "func_name ::= F_DATE", - /* 109 */ "func_name ::= F_DATE_FORMAT", - /* 110 */ "func_name ::= F_CURRENT_DATE", - /* 111 */ "func_name ::= F_NOW", - /* 112 */ "func_name ::= F_TIME", - /* 113 */ "func_name ::= F_TO_DAYS", - /* 114 */ "func_name ::= F_FROM_DAYS", - /* 115 */ "func_name ::= F_YEAR", - /* 116 */ "func_name ::= F_MONTH", - /* 117 */ "func_name ::= F_DAY", - /* 118 */ "func_name ::= F_DATE_ADD", - /* 119 */ "func_name ::= F_DATE_SUB", - /* 120 */ "func_name ::= F_ROUND", - /* 121 */ "func_name ::= F_FLOOR", - /* 122 */ "func_name ::= F_INET_ATON", - /* 123 */ "func_name ::= F_INET_NTOA", + /* 44 */ "list ::= PAR_OPEN union PAR_CLOSE", + /* 45 */ "list_items ::= expression_prio4", + /* 46 */ "list_items ::= list_items COMA expression_prio4", + /* 47 */ "arg_list ::=", + /* 48 */ "arg_list ::= argument", + /* 49 */ "arg_list ::= arg_list COMA argument", + /* 50 */ "argument ::= expression_prio4", + /* 51 */ "argument ::= INTERVAL expression_prio4 interval_unit", + /* 52 */ "interval_unit ::= F_SECOND", + /* 53 */ "interval_unit ::= F_MINUTE", + /* 54 */ "interval_unit ::= F_HOUR", + /* 55 */ "interval_unit ::= F_DAY", + /* 56 */ "interval_unit ::= F_MONTH", + /* 57 */ "interval_unit ::= F_YEAR", + /* 58 */ "scalar ::= num_scalar", + /* 59 */ "scalar ::= str_scalar", + /* 60 */ "scalar ::= null_scalar", + /* 61 */ "num_scalar ::= num_value", + /* 62 */ "str_scalar ::= str_value", + /* 63 */ "null_scalar ::= NULL_VAL", + /* 64 */ "field_id ::= name", + /* 65 */ "field_id ::= class_name DOT name", + /* 66 */ "class_name ::= name", + /* 67 */ "var_name ::= VARNAME", + /* 68 */ "name ::= NAME", + /* 69 */ "num_value ::= NUMVAL", + /* 70 */ "num_value ::= MATH_MINUS NUMVAL", + /* 71 */ "num_value ::= HEXVAL", + /* 72 */ "str_value ::= STRVAL", + /* 73 */ "operator1 ::= num_operator1", + /* 74 */ "operator1 ::= bitwise_operator1", + /* 75 */ "operator2 ::= num_operator2", + /* 76 */ "operator2 ::= str_operator", + /* 77 */ "operator2 ::= REGEXP", + /* 78 */ "operator2 ::= EQ", + /* 79 */ "operator2 ::= NOT_EQ", + /* 80 */ "operator3 ::= LOG_AND", + /* 81 */ "operator3 ::= bitwise_operator3", + /* 82 */ "operator4 ::= LOG_OR", + /* 83 */ "operator4 ::= bitwise_operator4", + /* 84 */ "num_operator1 ::= MATH_DIV", + /* 85 */ "num_operator1 ::= MATH_MULT", + /* 86 */ "num_operator2 ::= MATH_PLUS", + /* 87 */ "num_operator2 ::= MATH_MINUS", + /* 88 */ "num_operator2 ::= GT", + /* 89 */ "num_operator2 ::= LT", + /* 90 */ "num_operator2 ::= GE", + /* 91 */ "num_operator2 ::= LE", + /* 92 */ "str_operator ::= LIKE", + /* 93 */ "str_operator ::= NOT_LIKE", + /* 94 */ "str_operator ::= MATCHES", + /* 95 */ "bitwise_operator1 ::= BITWISE_LEFT_SHIFT", + /* 96 */ "bitwise_operator1 ::= BITWISE_RIGHT_SHIFT", + /* 97 */ "bitwise_operator3 ::= BITWISE_AND", + /* 98 */ "bitwise_operator4 ::= BITWISE_OR", + /* 99 */ "bitwise_operator4 ::= BITWISE_XOR", + /* 100 */ "list_operator ::= IN", + /* 101 */ "list_operator ::= NOT_IN", + /* 102 */ "func_name ::= F_IF", + /* 103 */ "func_name ::= F_ELT", + /* 104 */ "func_name ::= F_COALESCE", + /* 105 */ "func_name ::= F_ISNULL", + /* 106 */ "func_name ::= F_CONCAT", + /* 107 */ "func_name ::= F_SUBSTR", + /* 108 */ "func_name ::= F_TRIM", + /* 109 */ "func_name ::= F_DATE", + /* 110 */ "func_name ::= F_DATE_FORMAT", + /* 111 */ "func_name ::= F_CURRENT_DATE", + /* 112 */ "func_name ::= F_NOW", + /* 113 */ "func_name ::= F_TIME", + /* 114 */ "func_name ::= F_TO_DAYS", + /* 115 */ "func_name ::= F_FROM_DAYS", + /* 116 */ "func_name ::= F_YEAR", + /* 117 */ "func_name ::= F_MONTH", + /* 118 */ "func_name ::= F_DAY", + /* 119 */ "func_name ::= F_DATE_ADD", + /* 120 */ "func_name ::= F_DATE_SUB", + /* 121 */ "func_name ::= F_ROUND", + /* 122 */ "func_name ::= F_FLOOR", + /* 123 */ "func_name ::= F_INET_ATON", + /* 124 */ "func_name ::= F_INET_NTOA", ); /** @@ -1249,6 +1252,7 @@ static public $yy_action = array( array( 'lhs' => 88, 'rhs' => 3 ), array( 'lhs' => 95, 'rhs' => 3 ), array( 'lhs' => 95, 'rhs' => 3 ), + array( 'lhs' => 95, 'rhs' => 3 ), array( 'lhs' => 103, 'rhs' => 1 ), array( 'lhs' => 103, 'rhs' => 3 ), array( 'lhs' => 93, 'rhs' => 0 ), @@ -1348,11 +1352,11 @@ static public $yy_action = array( 7 => 7, 8 => 8, 9 => 9, - 44 => 9, - 47 => 9, + 45 => 9, + 48 => 9, 10 => 10, - 45 => 10, - 48 => 10, + 46 => 10, + 49 => 10, 11 => 11, 12 => 12, 15 => 12, @@ -1377,8 +1381,7 @@ static public $yy_action = array( 36 => 27, 38 => 27, 40 => 27, - 49 => 27, - 51 => 27, + 50 => 27, 52 => 27, 53 => 27, 54 => 27, @@ -1387,6 +1390,7 @@ static public $yy_action = array( 57 => 27, 58 => 27, 59 => 27, + 60 => 27, 31 => 31, 32 => 32, 33 => 33, @@ -1396,72 +1400,73 @@ static public $yy_action = array( 37 => 37, 42 => 42, 43 => 43, - 46 => 46, - 50 => 50, - 60 => 60, - 61 => 60, - 62 => 62, + 44 => 43, + 47 => 47, + 51 => 51, + 61 => 61, + 62 => 61, 63 => 63, 64 => 64, 65 => 65, - 101 => 65, - 102 => 65, - 103 => 65, - 104 => 65, - 105 => 65, - 106 => 65, - 107 => 65, - 108 => 65, - 109 => 65, - 110 => 65, - 111 => 65, - 112 => 65, - 113 => 65, - 114 => 65, - 115 => 65, - 116 => 65, - 117 => 65, - 118 => 65, - 119 => 65, - 120 => 65, - 121 => 65, - 122 => 65, - 123 => 65, 66 => 66, + 102 => 66, + 103 => 66, + 104 => 66, + 105 => 66, + 106 => 66, + 107 => 66, + 108 => 66, + 109 => 66, + 110 => 66, + 111 => 66, + 112 => 66, + 113 => 66, + 114 => 66, + 115 => 66, + 116 => 66, + 117 => 66, + 118 => 66, + 119 => 66, + 120 => 66, + 121 => 66, + 122 => 66, + 123 => 66, + 124 => 66, 67 => 67, 68 => 68, 69 => 69, 70 => 70, 71 => 71, 72 => 72, - 73 => 72, - 74 => 72, - 75 => 72, - 76 => 72, - 77 => 72, - 78 => 72, - 79 => 72, - 80 => 72, - 81 => 72, - 82 => 72, - 83 => 72, - 84 => 72, - 85 => 72, - 86 => 72, - 87 => 72, - 88 => 72, - 89 => 72, - 90 => 72, - 91 => 72, - 92 => 72, - 93 => 72, - 94 => 72, - 95 => 72, - 96 => 72, - 97 => 72, - 98 => 72, - 99 => 72, - 100 => 72, + 73 => 73, + 74 => 73, + 75 => 73, + 76 => 73, + 77 => 73, + 78 => 73, + 79 => 73, + 80 => 73, + 81 => 73, + 82 => 73, + 83 => 73, + 84 => 73, + 85 => 73, + 86 => 73, + 87 => 73, + 88 => 73, + 89 => 73, + 90 => 73, + 91 => 73, + 92 => 73, + 93 => 73, + 94 => 73, + 95 => 73, + 96 => 73, + 97 => 73, + 98 => 73, + 99 => 73, + 100 => 73, + 101 => 73, ); /* Beginning here are the reduction cases. A typical example ** follows: @@ -1471,49 +1476,49 @@ static public $yy_action = array( */ #line 29 "..\oql-parser.y" function yy_r0(){ $this->my_result = $this->yystack[$this->yyidx + 0]->minor; } -#line 1478 "..\oql-parser.php" +#line 1483 "..\oql-parser.php" #line 33 "..\oql-parser.y" function yy_r3(){ $this->_retvalue = new OqlUnionQuery($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1483 "..\oql-parser.php" +#line 1488 "..\oql-parser.php" #line 40 "..\oql-parser.y" function yy_r5(){ $this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor, array($this->yystack[$this->yyidx + -2]->minor)); } -#line 1488 "..\oql-parser.php" +#line 1493 "..\oql-parser.php" #line 43 "..\oql-parser.y" function yy_r6(){ $this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor, array($this->yystack[$this->yyidx + -2]->minor)); } -#line 1493 "..\oql-parser.php" +#line 1498 "..\oql-parser.php" #line 47 "..\oql-parser.y" function yy_r7(){ $this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -4]->minor); } -#line 1498 "..\oql-parser.php" +#line 1503 "..\oql-parser.php" #line 50 "..\oql-parser.y" function yy_r8(){ $this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -6]->minor); } -#line 1503 "..\oql-parser.php" +#line 1508 "..\oql-parser.php" #line 55 "..\oql-parser.y" function yy_r9(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 1508 "..\oql-parser.php" +#line 1513 "..\oql-parser.php" #line 58 "..\oql-parser.y" function yy_r10(){ array_push($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } -#line 1514 "..\oql-parser.php" +#line 1519 "..\oql-parser.php" #line 63 "..\oql-parser.y" function yy_r11(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1517 "..\oql-parser.php" +#line 1522 "..\oql-parser.php" #line 64 "..\oql-parser.y" function yy_r12(){ $this->_retvalue = null; } -#line 1520 "..\oql-parser.php" +#line 1525 "..\oql-parser.php" #line 66 "..\oql-parser.y" function yy_r13(){ // insert the join statement on top of the existing list @@ -1521,63 +1526,63 @@ static public $yy_action = array( // and return the updated array $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1528 "..\oql-parser.php" +#line 1533 "..\oql-parser.php" #line 72 "..\oql-parser.y" function yy_r14(){ $this->_retvalue = Array($this->yystack[$this->yyidx + 0]->minor); } -#line 1533 "..\oql-parser.php" +#line 1538 "..\oql-parser.php" #line 78 "..\oql-parser.y" function yy_r16(){ // create an array with one single item $this->_retvalue = new OqlJoinSpec($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1539 "..\oql-parser.php" +#line 1544 "..\oql-parser.php" #line 83 "..\oql-parser.y" function yy_r17(){ // create an array with one single item $this->_retvalue = new OqlJoinSpec($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1545 "..\oql-parser.php" +#line 1550 "..\oql-parser.php" #line 88 "..\oql-parser.y" function yy_r18(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, '=', $this->yystack[$this->yyidx + 0]->minor); } -#line 1548 "..\oql-parser.php" +#line 1553 "..\oql-parser.php" #line 89 "..\oql-parser.y" function yy_r19(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, 'BELOW', $this->yystack[$this->yyidx + 0]->minor); } -#line 1551 "..\oql-parser.php" +#line 1556 "..\oql-parser.php" #line 90 "..\oql-parser.y" function yy_r20(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, 'BELOW_STRICT', $this->yystack[$this->yyidx + 0]->minor); } -#line 1554 "..\oql-parser.php" +#line 1559 "..\oql-parser.php" #line 91 "..\oql-parser.y" function yy_r21(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, 'NOT_BELOW', $this->yystack[$this->yyidx + 0]->minor); } -#line 1557 "..\oql-parser.php" +#line 1562 "..\oql-parser.php" #line 92 "..\oql-parser.y" function yy_r22(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, 'NOT_BELOW_STRICT', $this->yystack[$this->yyidx + 0]->minor); } -#line 1560 "..\oql-parser.php" +#line 1565 "..\oql-parser.php" #line 93 "..\oql-parser.y" function yy_r23(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, 'ABOVE', $this->yystack[$this->yyidx + 0]->minor); } -#line 1563 "..\oql-parser.php" +#line 1568 "..\oql-parser.php" #line 94 "..\oql-parser.y" function yy_r24(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, 'ABOVE_STRICT', $this->yystack[$this->yyidx + 0]->minor); } -#line 1566 "..\oql-parser.php" +#line 1571 "..\oql-parser.php" #line 95 "..\oql-parser.y" function yy_r25(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, 'NOT_ABOVE', $this->yystack[$this->yyidx + 0]->minor); } -#line 1569 "..\oql-parser.php" +#line 1574 "..\oql-parser.php" #line 96 "..\oql-parser.y" function yy_r26(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, 'NOT_ABOVE_STRICT', $this->yystack[$this->yyidx + 0]->minor); } -#line 1572 "..\oql-parser.php" +#line 1577 "..\oql-parser.php" #line 98 "..\oql-parser.y" function yy_r27(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1575 "..\oql-parser.php" +#line 1580 "..\oql-parser.php" #line 103 "..\oql-parser.y" function yy_r31(){ $this->_retvalue = new FunctionOqlExpression($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + -1]->minor); } -#line 1578 "..\oql-parser.php" +#line 1583 "..\oql-parser.php" #line 104 "..\oql-parser.y" function yy_r32(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 1581 "..\oql-parser.php" +#line 1586 "..\oql-parser.php" #line 105 "..\oql-parser.y" function yy_r33(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1584 "..\oql-parser.php" +#line 1589 "..\oql-parser.php" #line 111 "..\oql-parser.y" function yy_r37(){ if ($this->yystack[$this->yyidx + -1]->minor == 'MATCHES') @@ -1589,45 +1594,45 @@ static public $yy_action = array( $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); } } -#line 1596 "..\oql-parser.php" +#line 1601 "..\oql-parser.php" #line 128 "..\oql-parser.y" function yy_r42(){ $this->_retvalue = new ListOqlExpression($this->yystack[$this->yyidx + -1]->minor); } -#line 1601 "..\oql-parser.php" +#line 1606 "..\oql-parser.php" #line 132 "..\oql-parser.y" function yy_r43(){ $this->_retvalue = new NestedQueryOqlExpression($this->yystack[$this->yyidx + -1]->minor); - } -#line 1606 "..\oql-parser.php" -#line 144 "..\oql-parser.y" - function yy_r46(){ - $this->_retvalue = array(); } #line 1611 "..\oql-parser.php" -#line 155 "..\oql-parser.y" - function yy_r50(){ $this->_retvalue = new IntervalOqlExpression($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1614 "..\oql-parser.php" -#line 168 "..\oql-parser.y" - function yy_r60(){ $this->_retvalue = new ScalarOqlExpression($this->yystack[$this->yyidx + 0]->minor); } -#line 1617 "..\oql-parser.php" -#line 170 "..\oql-parser.y" - function yy_r62(){ $this->_retvalue = new ScalarOqlExpression(null); } -#line 1620 "..\oql-parser.php" -#line 172 "..\oql-parser.y" - function yy_r63(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor); } -#line 1623 "..\oql-parser.php" +#line 147 "..\oql-parser.y" + function yy_r47(){ + $this->_retvalue = array(); + } +#line 1616 "..\oql-parser.php" +#line 158 "..\oql-parser.y" + function yy_r51(){ $this->_retvalue = new IntervalOqlExpression($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); } +#line 1619 "..\oql-parser.php" +#line 171 "..\oql-parser.y" + function yy_r61(){ $this->_retvalue = new ScalarOqlExpression($this->yystack[$this->yyidx + 0]->minor); } +#line 1622 "..\oql-parser.php" #line 173 "..\oql-parser.y" - function yy_r64(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -2]->minor); } -#line 1626 "..\oql-parser.php" -#line 174 "..\oql-parser.y" - function yy_r65(){ $this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; } -#line 1629 "..\oql-parser.php" + function yy_r63(){ $this->_retvalue = new ScalarOqlExpression(null); } +#line 1625 "..\oql-parser.php" +#line 175 "..\oql-parser.y" + function yy_r64(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor); } +#line 1628 "..\oql-parser.php" +#line 176 "..\oql-parser.y" + function yy_r65(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -2]->minor); } +#line 1631 "..\oql-parser.php" #line 177 "..\oql-parser.y" - function yy_r66(){ $this->_retvalue = new VariableOqlExpression(substr($this->yystack[$this->yyidx + 0]->minor, 1)); } -#line 1632 "..\oql-parser.php" -#line 179 "..\oql-parser.y" - function yy_r67(){ + function yy_r66(){ $this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; } +#line 1634 "..\oql-parser.php" +#line 180 "..\oql-parser.y" + function yy_r67(){ $this->_retvalue = new VariableOqlExpression(substr($this->yystack[$this->yyidx + 0]->minor, 1)); } +#line 1637 "..\oql-parser.php" +#line 182 "..\oql-parser.y" + function yy_r68(){ if ($this->yystack[$this->yyidx + 0]->minor[0] == '`') { $name = substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2); @@ -1638,22 +1643,22 @@ static public $yy_action = array( } $this->_retvalue = new OqlName($name, $this->m_iColPrev); } -#line 1645 "..\oql-parser.php" -#line 190 "..\oql-parser.y" - function yy_r68(){$this->_retvalue=(int)$this->yystack[$this->yyidx + 0]->minor; } -#line 1648 "..\oql-parser.php" -#line 191 "..\oql-parser.y" - function yy_r69(){$this->_retvalue=(int)-$this->yystack[$this->yyidx + 0]->minor; } -#line 1651 "..\oql-parser.php" -#line 192 "..\oql-parser.y" - function yy_r70(){$this->_retvalue=new OqlHexValue($this->yystack[$this->yyidx + 0]->minor); } -#line 1654 "..\oql-parser.php" +#line 1650 "..\oql-parser.php" #line 193 "..\oql-parser.y" - function yy_r71(){$this->_retvalue=stripslashes(substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2)); } -#line 1657 "..\oql-parser.php" + function yy_r69(){$this->_retvalue=(int)$this->yystack[$this->yyidx + 0]->minor; } +#line 1653 "..\oql-parser.php" +#line 194 "..\oql-parser.y" + function yy_r70(){$this->_retvalue=(int)-$this->yystack[$this->yyidx + 0]->minor; } +#line 1656 "..\oql-parser.php" +#line 195 "..\oql-parser.y" + function yy_r71(){$this->_retvalue=new OqlHexValue($this->yystack[$this->yyidx + 0]->minor); } +#line 1659 "..\oql-parser.php" #line 196 "..\oql-parser.y" - function yy_r72(){$this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; } -#line 1660 "..\oql-parser.php" + function yy_r72(){$this->_retvalue=stripslashes(substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2)); } +#line 1662 "..\oql-parser.php" +#line 199 "..\oql-parser.y" + function yy_r73(){$this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; } +#line 1665 "..\oql-parser.php" /** * placeholder for the left hand side in a reduce operation. @@ -1768,7 +1773,7 @@ static public $yy_action = array( #line 25 "..\oql-parser.y" throw new OQLParserException($this->m_sSourceQuery, $this->m_iLine, $this->m_iCol, $this->tokenName($yymajor), $TOKEN); -#line 1776 "..\oql-parser.php" +#line 1781 "..\oql-parser.php" } /** @@ -1935,7 +1940,7 @@ throw new OQLParserException($this->m_sSourceQuery, $this->m_iLine, $this->m_iCo } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); } } -#line 261 "..\oql-parser.y" +#line 264 "..\oql-parser.y" class OQLParserException extends OQLException @@ -2000,4 +2005,4 @@ class OQLParser extends OQLParserRaw } } -#line 2009 "..\oql-parser.php" +#line 2014 "..\oql-parser.php" diff --git a/core/oql/oql-parser.y b/core/oql/oql-parser.y index 96dcf5ec7b..4e95868fd7 100644 --- a/core/oql/oql-parser.y +++ b/core/oql/oql-parser.y @@ -128,10 +128,12 @@ expression_prio4(A) ::= expression_prio4(X) operator4(Y) expression_prio3(Z). { list(A) ::= PAR_OPEN list_items(X) PAR_CLOSE. { A = new ListOqlExpression(X); } -//added for IN (SELECT..) list(A) ::= PAR_OPEN query(X) PAR_CLOSE. { A = new NestedQueryOqlExpression(X); - } +} +list(A) ::= PAR_OPEN union(X) PAR_CLOSE. { + A = new NestedQueryOqlExpression(X); +} list_items(A) ::= expression_prio4(X). { A = array(X); @@ -322,4 +324,4 @@ class OQLParser extends OQLParserRaw } } -} \ No newline at end of file +} diff --git a/test/core/OQLTest.php b/test/core/OQLTest.php index 774208cb85..95fe7b25d9 100644 --- a/test/core/OQLTest.php +++ b/test/core/OQLTest.php @@ -69,6 +69,22 @@ class OQLTest extends ItopDataTestCase array('SELECT toto WHERE id IN (SELECT titi AS ti JOIN toto AS to ON to.a=ti.b)'), array('SELECT toto WHERE id IN (SELECT titi AS ti JOIN toto AS to ON to.a=ti.b WHERE to.a=1)'), array('SELECT toto WHERE id NOT IN (SELECT titi)'), + array("SELECT User AS U JOIN Person AS P ON U.contactid = P.id +WHERE U.status='enabled' AND U.id NOT IN ( + SELECT User AS U + JOIN Person AS P ON U.contactid=P.id + JOIN URP_UserOrg AS L ON L.userid = U.id + WHERE U.status='enabled' AND L.allowed_org_id = P.org_id + UNION SELECT User AS U + WHERE U.status='enabled' AND U.id NOT IN ( + SELECT User AS U + JOIN URP_UserOrg AS L ON L.userid = U.id + WHERE U.status='enabled' + ) +)"), + array("SELECT UserRequest AS Ur WHERE Ur.id NOT IN (SELECT UserRequest AS Ur JOIN lnkFunctionalCIToTicket AS lnk ON lnk.ticket_id = Ur.id)"), + array("SELECT Ticket AS T WHERE T. finalclass IN ('userrequest' , 'change') AND T.id NOT IN (SELECT UserRequest AS Ur JOIN lnkFunctionalCIToTicket AS lnk ON lnk.ticket_id = Ur.id UNION SELECT Change AS C JOIN lnkFunctionalCIToTicket AS lnk ON lnk.ticket_id = C.id)"), + array("SELECT PhysicalDevice WHERE status='production' AND id NOT IN (SELECT PhysicalDevice AS p JOIN lnkFunctionalCIToProviderContract AS l ON l.functionalci_id=p.id)"), ); }