diff --git a/addons/userrights/userrightsmatrix.class.inc.php b/addons/userrights/userrightsmatrix.class.inc.php
index 8341f6cdf..aacdd2020 100644
--- a/addons/userrights/userrightsmatrix.class.inc.php
+++ b/addons/userrights/userrightsmatrix.class.inc.php
@@ -336,6 +336,12 @@ class UserRightsMatrix extends UserRightsAddOnAPI
return $oLogin->Get('userid');
}
+ public function GetContactId($sUserName)
+ {
+ // this module has no link with the business data
+ return null;
+ }
+
public function GetFilter($sUserName, $sClass)
{
$oNullFilter = new DBObjectSearch($sClass);
diff --git a/addons/userrights/userrightsnull.class.inc.php b/addons/userrights/userrightsnull.class.inc.php
index 79a8600a7..2d58eac41 100644
--- a/addons/userrights/userrightsnull.class.inc.php
+++ b/addons/userrights/userrightsnull.class.inc.php
@@ -47,6 +47,12 @@ class UserRightsNull extends UserRightsAddOnAPI
return 1;
}
+ public function GetContactId($sUserName)
+ {
+ // this module has no link with the business data
+ return null;
+ }
+
public function GetFilter($sUserName, $sClass)
{
$oNullFilter = new DBObjectSearch($sClass);
diff --git a/addons/userrights/userrightsprofile.class.inc.php b/addons/userrights/userrightsprofile.class.inc.php
index d71bcf607..75d582cfc 100644
--- a/addons/userrights/userrightsprofile.class.inc.php
+++ b/addons/userrights/userrightsprofile.class.inc.php
@@ -733,6 +733,8 @@ class UserRightsProfile extends UserRightsAddOnAPI
protected $m_aUserProfiles = array(); // userid,profileid -> object
protected $m_aProPro = array(); // profileid,dimensionid -> object
+ protected $m_aLogin2UserId = array(); // login -> id
+
protected $m_aAdmins = array(); // id of users being linked to the profile #ADMIN_PROFILE_ID
protected $m_aClassActionGrants = array(); // profile, class, action -> permission
@@ -746,7 +748,8 @@ class UserRightsProfile extends UserRightsAddOnAPI
$oUserSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_Users"));
while ($oUser = $oUserSet->Fetch())
{
- $this->m_aUsers[$oUser->GetKey()] = $oUser;
+ $this->m_aUsers[$oUser->GetKey()] = $oUser;
+ $this->m_aLogin2UserId[$oUser->Get('login')] = $oUser->GetKey();
}
$oDimensionSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_Dimensions"));
@@ -818,15 +821,25 @@ exit;
public function GetUserId($sUserName)
{
- $oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_Users WHERE login = :login"), array(), array('login' => $sUserName));
- if ($oSet->Count() < 1)
+ if (array_key_exists($sUserName, $this->m_aLogin2UserId))
{
- // todo: throw an exception?
- return false;
+ // This happens really when the list of users is being loaded into the cache!!!
+ $iUserId = $this->m_aLogin2UserId[$sUserName];
+ return $iUserId;
}
+ return null;
+ }
- $oUser = $oSet->Fetch();
- return $oUser->GetKey();
+ public function GetContactId($sUserName)
+ {
+ if (array_key_exists($sUserName, $this->m_aLogin2UserId))
+ {
+ // This happens really when the list of users is being loaded into the cache!!!
+ $iUserId = $this->m_aLogin2UserId[$sUserName];
+ $oUser = $this->m_aUsers[$iUserId];
+ return $oUser->Get('userid');
+ }
+ return null;
}
public function GetFilter($sUserName, $sClass)
diff --git a/core/metamodel.class.php b/core/metamodel.class.php
index b05524b39..3e79c0a17 100644
--- a/core/metamodel.class.php
+++ b/core/metamodel.class.php
@@ -1202,6 +1202,10 @@ abstract class MetaModel
$aScalarArgs[$sArgName] = (string) $value;
}
}
+ // Add standard contextual arguments
+ //
+ $aScalarArgs['current_contact_id'] = UserRights::GetContactId();
+
return $aScalarArgs;
}
diff --git a/core/oql/oql-lexer.php b/core/oql/oql-lexer.php
index 8853786ff..1422bf5f2 100644
--- a/core/oql/oql-lexer.php
+++ b/core/oql/oql-lexer.php
@@ -125,6 +125,9 @@ class OQLLexerRaw
'/^YEAR/',
'/^MONTH/',
'/^DAY/',
+ '/^HOUR/',
+ '/^MINUTE/',
+ '/^SECOND/',
'/^DATE_ADD/',
'/^DATE_SUB/',
'/^ROUND/',
@@ -444,44 +447,59 @@ class OQLLexerRaw
function yy_r1_43($yy_subpatterns)
{
- $this->token = OQLParser::F_DATE_ADD;
+ $this->token = OQLParser::F_HOUR;
}
function yy_r1_44($yy_subpatterns)
{
- $this->token = OQLParser::F_DATE_SUB;
+ $this->token = OQLParser::F_MINUTE;
}
function yy_r1_45($yy_subpatterns)
{
- $this->token = OQLParser::F_ROUND;
+ $this->token = OQLParser::F_SECOND;
}
function yy_r1_46($yy_subpatterns)
{
- $this->token = OQLParser::F_FLOOR;
+ $this->token = OQLParser::F_DATE_ADD;
}
function yy_r1_47($yy_subpatterns)
{
- $this->token = OQLParser::NUMVAL;
+ $this->token = OQLParser::F_DATE_SUB;
}
function yy_r1_48($yy_subpatterns)
{
- $this->token = OQLParser::STRVAL;
+ $this->token = OQLParser::F_ROUND;
}
function yy_r1_49($yy_subpatterns)
{
- $this->token = OQLParser::NAME;
+ $this->token = OQLParser::F_FLOOR;
}
function yy_r1_50($yy_subpatterns)
{
- $this->token = OQLParser::VARNAME;
+ $this->token = OQLParser::NUMVAL;
}
function yy_r1_51($yy_subpatterns)
+ {
+
+ $this->token = OQLParser::STRVAL;
+ }
+ function yy_r1_52($yy_subpatterns)
+ {
+
+ $this->token = OQLParser::NAME;
+ }
+ function yy_r1_53($yy_subpatterns)
+ {
+
+ $this->token = OQLParser::VARNAME;
+ }
+ function yy_r1_54($yy_subpatterns)
{
$this->token = OQLParser::DOT;
diff --git a/core/oql/oql-lexer.plex b/core/oql/oql-lexer.plex
index c8e90dda1..d4a23500b 100644
--- a/core/oql/oql-lexer.plex
+++ b/core/oql/oql-lexer.plex
@@ -97,6 +97,9 @@ f_from_days = "FROM_DAYS"
f_year = "YEAR"
f_month = "MONTH"
f_day = "DAY"
+f_hour = "HOUR"
+f_minute = "MINUTE"
+f_second = "SECOND"
f_date_add = "DATE_ADD"
f_date_sub = "DATE_SUB"
f_round = "ROUND"
@@ -238,6 +241,15 @@ f_month {
f_day {
$this->token = OQLParser::F_DAY;
}
+f_hour {
+ $this->token = OQLParser::F_HOUR;
+}
+f_minute {
+ $this->token = OQLParser::F_MINUTE;
+}
+f_second {
+ $this->token = OQLParser::F_SECOND;
+}
f_date_add {
$this->token = OQLParser::F_DATE_ADD;
}
diff --git a/core/oql/oql-parser.php b/core/oql/oql-parser.php
index e66f48274..7913b3d1d 100644
--- a/core/oql/oql-parser.php
+++ b/core/oql/oql-parser.php
@@ -121,49 +121,52 @@ class OQLParserRaw#line 102 "oql-parser.php"
const PAR_CLOSE = 8;
const COMA = 9;
const INTERVAL = 10;
- const F_DAY = 11;
- const F_MONTH = 12;
- const F_YEAR = 13;
- const DOT = 14;
- const VARNAME = 15;
- const NAME = 16;
- const NUMVAL = 17;
- const STRVAL = 18;
- const NOT_EQ = 19;
- const LOG_AND = 20;
- const LOG_OR = 21;
- const MATH_DIV = 22;
- const MATH_MULT = 23;
- const MATH_PLUS = 24;
- const MATH_MINUS = 25;
- const GT = 26;
- const LT = 27;
- const GE = 28;
- const LE = 29;
- const LIKE = 30;
- const NOT_LIKE = 31;
- const IN = 32;
- const NOT_IN = 33;
- const F_IF = 34;
- const F_ELT = 35;
- const F_COALESCE = 36;
- const F_CONCAT = 37;
- const F_SUBSTR = 38;
- const F_TRIM = 39;
- const F_DATE = 40;
- const F_DATE_FORMAT = 41;
- const F_CURRENT_DATE = 42;
- const F_NOW = 43;
- const F_TIME = 44;
- const F_TO_DAYS = 45;
- const F_FROM_DAYS = 46;
- const F_DATE_ADD = 47;
- const F_DATE_SUB = 48;
- const F_ROUND = 49;
- const F_FLOOR = 50;
- const YY_NO_ACTION = 209;
- const YY_ACCEPT_ACTION = 208;
- const YY_ERROR_ACTION = 207;
+ const F_SECOND = 11;
+ const F_MINUTE = 12;
+ const F_HOUR = 13;
+ const F_DAY = 14;
+ const F_MONTH = 15;
+ const F_YEAR = 16;
+ const DOT = 17;
+ const VARNAME = 18;
+ const NAME = 19;
+ const NUMVAL = 20;
+ const STRVAL = 21;
+ const NOT_EQ = 22;
+ const LOG_AND = 23;
+ const LOG_OR = 24;
+ const MATH_DIV = 25;
+ const MATH_MULT = 26;
+ const MATH_PLUS = 27;
+ const MATH_MINUS = 28;
+ const GT = 29;
+ const LT = 30;
+ const GE = 31;
+ const LE = 32;
+ const LIKE = 33;
+ const NOT_LIKE = 34;
+ const IN = 35;
+ const NOT_IN = 36;
+ const F_IF = 37;
+ const F_ELT = 38;
+ const F_COALESCE = 39;
+ const F_CONCAT = 40;
+ const F_SUBSTR = 41;
+ const F_TRIM = 42;
+ const F_DATE = 43;
+ const F_DATE_FORMAT = 44;
+ const F_CURRENT_DATE = 45;
+ const F_NOW = 46;
+ const F_TIME = 47;
+ const F_TO_DAYS = 48;
+ const F_FROM_DAYS = 49;
+ const F_DATE_ADD = 50;
+ const F_DATE_SUB = 51;
+ const F_ROUND = 52;
+ const F_FLOOR = 53;
+ const YY_NO_ACTION = 215;
+ const YY_ACCEPT_ACTION = 214;
+ const YY_ERROR_ACTION = 213;
/* 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
@@ -215,161 +218,161 @@ 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 = 429;
+ const YY_SZ_ACTTAB = 422;
static public $yy_action = array(
- /* 0 */ 4, 54, 8, 5, 96, 97, 98, 86, 95, 94,
- /* 10 */ 76, 77, 80, 79, 53, 49, 51, 25, 45, 52,
- /* 20 */ 55, 57, 46, 47, 50, 56, 70, 111, 110, 109,
- /* 30 */ 108, 112, 113, 117, 116, 115, 114, 71, 106, 99,
- /* 40 */ 100, 101, 105, 104, 26, 66, 66, 41, 67, 81,
- /* 50 */ 4, 48, 43, 82, 96, 97, 98, 3, 95, 94,
- /* 60 */ 76, 77, 38, 83, 11, 75, 74, 73, 72, 75,
- /* 70 */ 74, 73, 72, 91, 63, 42, 22, 111, 110, 109,
- /* 80 */ 108, 112, 113, 117, 116, 115, 114, 71, 106, 99,
- /* 90 */ 100, 101, 105, 104, 4, 35, 6, 22, 96, 97,
- /* 100 */ 98, 7, 95, 94, 76, 77, 65, 64, 60, 23,
- /* 110 */ 6, 12, 13, 58, 41, 41, 91, 18, 61, 43,
- /* 120 */ 69, 111, 110, 109, 108, 112, 113, 117, 116, 115,
- /* 130 */ 114, 71, 106, 99, 100, 101, 105, 104, 208, 107,
- /* 140 */ 87, 41, 42, 42, 39, 66, 88, 34, 27, 84,
- /* 150 */ 89, 44, 93, 2, 36, 20, 22, 15, 92, 37,
- /* 160 */ 76, 77, 102, 118, 9, 75, 74, 73, 72, 42,
- /* 170 */ 94, 91, 66, 16, 24, 163, 21, 41, 103, 32,
- /* 180 */ 1, 62, 88, 33, 27, 84, 89, 44, 40, 21,
- /* 190 */ 31, 20, 78, 15, 90, 37, 10, 177, 177, 59,
- /* 200 */ 177, 75, 74, 73, 72, 42, 41, 177, 177, 177,
- /* 210 */ 177, 88, 33, 27, 84, 89, 44, 177, 177, 177,
- /* 220 */ 20, 177, 15, 177, 37, 177, 177, 177, 68, 177,
- /* 230 */ 75, 74, 73, 72, 42, 177, 177, 85, 41, 177,
- /* 240 */ 177, 177, 177, 88, 34, 27, 84, 89, 44, 177,
- /* 250 */ 177, 177, 20, 177, 15, 177, 37, 177, 177, 177,
- /* 260 */ 177, 177, 75, 74, 73, 72, 42, 41, 177, 177,
- /* 270 */ 177, 177, 88, 17, 27, 84, 89, 44, 177, 177,
- /* 280 */ 177, 20, 177, 15, 177, 37, 177, 177, 177, 177,
- /* 290 */ 177, 75, 74, 73, 72, 42, 177, 177, 177, 41,
- /* 300 */ 177, 177, 177, 177, 88, 29, 27, 84, 89, 44,
- /* 310 */ 177, 177, 177, 20, 177, 15, 177, 37, 177, 177,
- /* 320 */ 177, 177, 177, 75, 74, 73, 72, 42, 41, 177,
- /* 330 */ 177, 177, 177, 88, 177, 27, 84, 89, 44, 177,
- /* 340 */ 177, 177, 20, 177, 15, 177, 30, 177, 177, 177,
- /* 350 */ 177, 177, 75, 74, 73, 72, 42, 177, 177, 177,
- /* 360 */ 41, 177, 177, 177, 177, 88, 177, 27, 84, 89,
- /* 370 */ 44, 177, 177, 177, 20, 177, 14, 177, 177, 177,
- /* 380 */ 177, 177, 177, 177, 75, 74, 73, 72, 42, 41,
- /* 390 */ 177, 177, 177, 177, 88, 177, 27, 84, 89, 44,
- /* 400 */ 41, 177, 177, 19, 177, 88, 177, 28, 84, 89,
- /* 410 */ 44, 177, 177, 75, 74, 73, 72, 42, 177, 177,
- /* 420 */ 177, 177, 177, 177, 75, 74, 73, 72, 42,
+ /* 0 */ 4, 50, 84, 5, 33, 10, 25, 99, 100, 101,
+ /* 10 */ 70, 98, 97, 79, 80, 38, 7, 55, 78, 77,
+ /* 20 */ 76, 75, 57, 56, 58, 47, 48, 49, 46, 54,
+ /* 30 */ 114, 113, 112, 111, 115, 116, 120, 119, 118, 117,
+ /* 40 */ 110, 109, 74, 103, 104, 108, 107, 24, 6, 43,
+ /* 50 */ 43, 71, 85, 4, 91, 69, 29, 87, 92, 42,
+ /* 60 */ 99, 100, 101, 19, 98, 97, 79, 80, 78, 77,
+ /* 70 */ 76, 75, 93, 78, 77, 76, 75, 45, 45, 96,
+ /* 80 */ 2, 68, 18, 114, 113, 112, 111, 115, 116, 120,
+ /* 90 */ 119, 118, 117, 110, 109, 74, 103, 104, 108, 107,
+ /* 100 */ 4, 43, 8, 86, 11, 62, 41, 99, 100, 101,
+ /* 110 */ 73, 98, 97, 79, 80, 52, 51, 21, 13, 64,
+ /* 120 */ 12, 25, 89, 43, 40, 44, 3, 53, 41, 45,
+ /* 130 */ 114, 113, 112, 111, 115, 116, 120, 119, 118, 117,
+ /* 140 */ 110, 109, 74, 103, 104, 108, 107, 214, 102, 90,
+ /* 150 */ 43, 45, 73, 73, 95, 91, 37, 29, 87, 92,
+ /* 160 */ 42, 83, 82, 23, 20, 26, 15, 22, 31, 35,
+ /* 170 */ 94, 25, 9, 169, 78, 77, 76, 75, 45, 30,
+ /* 180 */ 72, 67, 66, 61, 60, 63, 106, 79, 80, 43,
+ /* 190 */ 1, 73, 6, 94, 91, 32, 29, 87, 92, 42,
+ /* 200 */ 39, 105, 121, 20, 16, 15, 94, 31, 81, 22,
+ /* 210 */ 97, 65, 36, 78, 77, 76, 75, 45, 43, 183,
+ /* 220 */ 183, 183, 183, 91, 32, 29, 87, 92, 42, 183,
+ /* 230 */ 183, 183, 20, 183, 15, 183, 31, 183, 183, 183,
+ /* 240 */ 59, 183, 78, 77, 76, 75, 45, 88, 43, 183,
+ /* 250 */ 183, 183, 183, 91, 37, 29, 87, 92, 42, 183,
+ /* 260 */ 183, 183, 20, 183, 15, 183, 31, 183, 183, 183,
+ /* 270 */ 183, 183, 78, 77, 76, 75, 45, 43, 183, 183,
+ /* 280 */ 183, 183, 91, 17, 29, 87, 92, 42, 183, 183,
+ /* 290 */ 183, 20, 183, 15, 183, 31, 183, 183, 183, 183,
+ /* 300 */ 183, 78, 77, 76, 75, 45, 43, 183, 183, 183,
+ /* 310 */ 183, 91, 28, 29, 87, 92, 42, 183, 183, 183,
+ /* 320 */ 20, 183, 15, 183, 31, 183, 183, 183, 183, 183,
+ /* 330 */ 78, 77, 76, 75, 45, 43, 183, 183, 183, 183,
+ /* 340 */ 91, 183, 29, 87, 92, 42, 183, 183, 183, 20,
+ /* 350 */ 183, 15, 183, 34, 183, 183, 183, 183, 183, 78,
+ /* 360 */ 77, 76, 75, 45, 43, 183, 183, 183, 183, 91,
+ /* 370 */ 183, 29, 87, 92, 42, 183, 183, 183, 20, 183,
+ /* 380 */ 14, 183, 183, 183, 183, 183, 183, 183, 78, 77,
+ /* 390 */ 76, 75, 45, 43, 183, 183, 183, 183, 91, 183,
+ /* 400 */ 27, 87, 92, 42, 183, 183, 183, 183, 183, 183,
+ /* 410 */ 183, 183, 183, 183, 183, 183, 183, 78, 77, 76,
+ /* 420 */ 75, 45,
);
static public $yy_lookahead = array(
- /* 0 */ 7, 6, 72, 10, 11, 12, 13, 57, 15, 16,
- /* 10 */ 17, 18, 32, 33, 19, 85, 86, 55, 55, 24,
- /* 20 */ 25, 26, 27, 28, 29, 30, 31, 34, 35, 36,
+ /* 0 */ 7, 6, 66, 10, 59, 7, 61, 14, 15, 16,
+ /* 10 */ 60, 18, 19, 20, 21, 79, 77, 22, 82, 83,
+ /* 20 */ 84, 85, 27, 28, 29, 30, 31, 32, 33, 34,
/* 30 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- /* 40 */ 47, 48, 49, 50, 1, 83, 83, 55, 20, 63,
- /* 50 */ 7, 59, 60, 63, 11, 12, 13, 3, 15, 16,
- /* 60 */ 17, 18, 76, 8, 9, 79, 80, 81, 82, 79,
- /* 70 */ 80, 81, 82, 21, 56, 83, 58, 34, 35, 36,
- /* 80 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- /* 90 */ 47, 48, 49, 50, 7, 56, 75, 58, 11, 12,
- /* 100 */ 13, 74, 15, 16, 17, 18, 11, 12, 13, 2,
- /* 110 */ 75, 5, 5, 78, 55, 55, 21, 55, 59, 60,
- /* 120 */ 60, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- /* 130 */ 43, 44, 45, 46, 47, 48, 49, 50, 52, 53,
- /* 140 */ 54, 55, 83, 83, 55, 83, 60, 61, 62, 63,
- /* 150 */ 64, 65, 8, 9, 56, 69, 58, 71, 8, 73,
- /* 160 */ 17, 18, 22, 23, 70, 79, 80, 81, 82, 83,
- /* 170 */ 16, 21, 83, 6, 2, 14, 4, 55, 84, 14,
- /* 180 */ 7, 57, 60, 61, 62, 63, 64, 65, 66, 4,
- /* 190 */ 67, 69, 83, 71, 68, 73, 7, 87, 87, 77,
- /* 200 */ 87, 79, 80, 81, 82, 83, 55, 87, 87, 87,
- /* 210 */ 87, 60, 61, 62, 63, 64, 65, 87, 87, 87,
- /* 220 */ 69, 87, 71, 87, 73, 87, 87, 87, 77, 87,
- /* 230 */ 79, 80, 81, 82, 83, 87, 87, 54, 55, 87,
- /* 240 */ 87, 87, 87, 60, 61, 62, 63, 64, 65, 87,
- /* 250 */ 87, 87, 69, 87, 71, 87, 73, 87, 87, 87,
- /* 260 */ 87, 87, 79, 80, 81, 82, 83, 55, 87, 87,
- /* 270 */ 87, 87, 60, 61, 62, 63, 64, 65, 87, 87,
- /* 280 */ 87, 69, 87, 71, 87, 73, 87, 87, 87, 87,
- /* 290 */ 87, 79, 80, 81, 82, 83, 87, 87, 87, 55,
- /* 300 */ 87, 87, 87, 87, 60, 61, 62, 63, 64, 65,
- /* 310 */ 87, 87, 87, 69, 87, 71, 87, 73, 87, 87,
- /* 320 */ 87, 87, 87, 79, 80, 81, 82, 83, 55, 87,
- /* 330 */ 87, 87, 87, 60, 87, 62, 63, 64, 65, 87,
- /* 340 */ 87, 87, 69, 87, 71, 87, 73, 87, 87, 87,
- /* 350 */ 87, 87, 79, 80, 81, 82, 83, 87, 87, 87,
- /* 360 */ 55, 87, 87, 87, 87, 60, 87, 62, 63, 64,
- /* 370 */ 65, 87, 87, 87, 69, 87, 71, 87, 87, 87,
- /* 380 */ 87, 87, 87, 87, 79, 80, 81, 82, 83, 55,
- /* 390 */ 87, 87, 87, 87, 60, 87, 62, 63, 64, 65,
- /* 400 */ 55, 87, 87, 69, 87, 60, 87, 62, 63, 64,
- /* 410 */ 65, 87, 87, 79, 80, 81, 82, 83, 87, 87,
- /* 420 */ 87, 87, 87, 87, 79, 80, 81, 82, 83,
+ /* 40 */ 47, 48, 49, 50, 51, 52, 53, 1, 78, 58,
+ /* 50 */ 58, 81, 66, 7, 63, 63, 65, 66, 67, 68,
+ /* 60 */ 14, 15, 16, 72, 18, 19, 20, 21, 82, 83,
+ /* 70 */ 84, 85, 71, 82, 83, 84, 85, 86, 86, 8,
+ /* 80 */ 9, 23, 58, 37, 38, 39, 40, 41, 42, 43,
+ /* 90 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ /* 100 */ 7, 58, 75, 8, 9, 62, 63, 14, 15, 16,
+ /* 110 */ 86, 18, 19, 20, 21, 88, 89, 2, 5, 59,
+ /* 120 */ 5, 61, 60, 58, 58, 58, 3, 62, 63, 86,
+ /* 130 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ /* 140 */ 47, 48, 49, 50, 51, 52, 53, 55, 56, 57,
+ /* 150 */ 58, 86, 86, 86, 8, 63, 64, 65, 66, 67,
+ /* 160 */ 68, 35, 36, 58, 72, 2, 74, 4, 76, 59,
+ /* 170 */ 24, 61, 73, 17, 82, 83, 84, 85, 86, 17,
+ /* 180 */ 11, 12, 13, 14, 15, 16, 87, 20, 21, 58,
+ /* 190 */ 7, 86, 78, 24, 63, 64, 65, 66, 67, 68,
+ /* 200 */ 69, 25, 26, 72, 6, 74, 24, 76, 86, 4,
+ /* 210 */ 19, 80, 70, 82, 83, 84, 85, 86, 58, 90,
+ /* 220 */ 90, 90, 90, 63, 64, 65, 66, 67, 68, 90,
+ /* 230 */ 90, 90, 72, 90, 74, 90, 76, 90, 90, 90,
+ /* 240 */ 80, 90, 82, 83, 84, 85, 86, 57, 58, 90,
+ /* 250 */ 90, 90, 90, 63, 64, 65, 66, 67, 68, 90,
+ /* 260 */ 90, 90, 72, 90, 74, 90, 76, 90, 90, 90,
+ /* 270 */ 90, 90, 82, 83, 84, 85, 86, 58, 90, 90,
+ /* 280 */ 90, 90, 63, 64, 65, 66, 67, 68, 90, 90,
+ /* 290 */ 90, 72, 90, 74, 90, 76, 90, 90, 90, 90,
+ /* 300 */ 90, 82, 83, 84, 85, 86, 58, 90, 90, 90,
+ /* 310 */ 90, 63, 64, 65, 66, 67, 68, 90, 90, 90,
+ /* 320 */ 72, 90, 74, 90, 76, 90, 90, 90, 90, 90,
+ /* 330 */ 82, 83, 84, 85, 86, 58, 90, 90, 90, 90,
+ /* 340 */ 63, 90, 65, 66, 67, 68, 90, 90, 90, 72,
+ /* 350 */ 90, 74, 90, 76, 90, 90, 90, 90, 90, 82,
+ /* 360 */ 83, 84, 85, 86, 58, 90, 90, 90, 90, 63,
+ /* 370 */ 90, 65, 66, 67, 68, 90, 90, 90, 72, 90,
+ /* 380 */ 74, 90, 90, 90, 90, 90, 90, 90, 82, 83,
+ /* 390 */ 84, 85, 86, 58, 90, 90, 90, 90, 63, 90,
+ /* 400 */ 65, 66, 67, 68, 90, 90, 90, 90, 90, 90,
+ /* 410 */ 90, 90, 90, 90, 90, 90, 90, 82, 83, 84,
+ /* 420 */ 85, 86,
);
- const YY_SHIFT_USE_DFLT = -21;
+ const YY_SHIFT_USE_DFLT = -8;
const YY_SHIFT_MAX = 45;
static public $yy_shift_ofst = array(
- /* 0 */ 43, -7, -7, 87, 87, 87, 87, 87, 87, 87,
- /* 10 */ 143, 143, 154, 154, -5, -5, 154, 95, 172, 140,
- /* 20 */ 140, 154, 185, 154, 154, 185, 154, -20, -20, 150,
- /* 30 */ 28, 189, 154, 52, 52, 54, 54, 28, 55, 107,
- /* 40 */ 144, 165, 161, 167, 173, 106,
+ /* 0 */ 46, -7, -7, 93, 93, 93, 93, 93, 93, 93,
+ /* 10 */ 167, 167, 191, 191, -5, -5, 191, 169, 163, 176,
+ /* 20 */ 176, 191, 191, 205, 191, 205, 191, 126, 146, 126,
+ /* 30 */ 191, 58, 182, 123, 58, 123, -2, 182, 95, 71,
+ /* 40 */ 115, 198, 183, 162, 113, 156,
);
- const YY_REDUCE_USE_DFLT = -71;
+ const YY_REDUCE_USE_DFLT = -65;
const YY_REDUCE_MAX = 37;
static public $yy_reduce_ofst = array(
- /* 0 */ 86, 122, 151, 183, 244, 212, 273, 305, 334, 345,
- /* 10 */ -14, -10, 59, -8, -70, -70, 60, 35, 98, 94,
- /* 20 */ 94, 89, 18, -37, -38, 39, 62, 123, 123, 21,
- /* 30 */ 27, 126, 109, 21, 21, 124, -50, 27,
+ /* 0 */ 92, 131, 160, 190, 248, 219, 277, 306, -9, 335,
+ /* 10 */ -64, -14, 65, 43, 27, 27, -8, -30, 110, 99,
+ /* 20 */ 99, 67, 66, -55, 24, 60, 105, 142, 114, 142,
+ /* 30 */ 122, -61, 114, -50, -61, 62, 1, 114,
);
static public $yyExpectedTokens = array(
- /* 0 */ array(1, 7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 1 */ array(7, 10, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 2 */ array(7, 10, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 3 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 4 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 5 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 6 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 7 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 8 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 9 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ),
- /* 10 */ array(17, 18, ),
- /* 11 */ array(17, 18, ),
- /* 12 */ array(16, ),
- /* 13 */ array(16, ),
- /* 14 */ array(6, 19, 24, 25, 26, 27, 28, 29, 30, 31, ),
- /* 15 */ array(6, 19, 24, 25, 26, 27, 28, 29, 30, 31, ),
- /* 16 */ array(16, ),
- /* 17 */ array(11, 12, 13, 21, ),
+ /* 0 */ array(1, 7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 1 */ array(7, 10, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 2 */ array(7, 10, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 3 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 4 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 5 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 6 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 7 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 8 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 9 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ),
+ /* 10 */ array(20, 21, ),
+ /* 11 */ array(20, 21, ),
+ /* 12 */ array(19, ),
+ /* 13 */ array(19, ),
+ /* 14 */ array(6, 22, 27, 28, 29, 30, 31, 32, 33, 34, ),
+ /* 15 */ array(6, 22, 27, 28, 29, 30, 31, 32, 33, 34, ),
+ /* 16 */ array(19, ),
+ /* 17 */ array(11, 12, 13, 14, 15, 16, 24, ),
/* 18 */ array(2, 4, ),
- /* 19 */ array(22, 23, ),
- /* 20 */ array(22, 23, ),
- /* 21 */ array(16, ),
- /* 22 */ array(4, ),
- /* 23 */ array(16, ),
- /* 24 */ array(16, ),
+ /* 19 */ array(25, 26, ),
+ /* 20 */ array(25, 26, ),
+ /* 21 */ array(19, ),
+ /* 22 */ array(19, ),
+ /* 23 */ array(4, ),
+ /* 24 */ array(19, ),
/* 25 */ array(4, ),
- /* 26 */ array(16, ),
- /* 27 */ array(32, 33, ),
- /* 28 */ array(32, 33, ),
- /* 29 */ array(8, 21, ),
- /* 30 */ array(20, ),
- /* 31 */ array(7, ),
- /* 32 */ array(16, ),
- /* 33 */ array(21, ),
- /* 34 */ array(21, ),
+ /* 26 */ array(19, ),
+ /* 27 */ array(35, 36, ),
+ /* 28 */ array(8, 24, ),
+ /* 29 */ array(35, 36, ),
+ /* 30 */ array(19, ),
+ /* 31 */ array(23, ),
+ /* 32 */ array(24, ),
+ /* 33 */ array(3, ),
+ /* 34 */ array(23, ),
/* 35 */ array(3, ),
- /* 36 */ array(3, ),
- /* 37 */ array(20, ),
+ /* 36 */ array(7, ),
+ /* 37 */ array(24, ),
/* 38 */ array(8, 9, ),
- /* 39 */ array(2, 5, ),
- /* 40 */ array(8, 9, ),
- /* 41 */ array(14, ),
- /* 42 */ array(14, ),
- /* 43 */ array(6, ),
- /* 44 */ array(7, ),
- /* 45 */ array(5, ),
+ /* 39 */ array(8, 9, ),
+ /* 40 */ array(2, 5, ),
+ /* 41 */ array(6, ),
+ /* 42 */ array(7, ),
+ /* 43 */ array(17, ),
+ /* 44 */ array(5, ),
+ /* 45 */ array(17, ),
/* 46 */ array(),
/* 47 */ array(),
/* 48 */ array(),
@@ -443,20 +446,24 @@ static public $yy_action = array(
/* 116 */ array(),
/* 117 */ array(),
/* 118 */ array(),
+ /* 119 */ array(),
+ /* 120 */ array(),
+ /* 121 */ array(),
);
static public $yy_default = array(
- /* 0 */ 207, 149, 207, 207, 207, 207, 207, 207, 207, 207,
- /* 10 */ 207, 207, 207, 207, 143, 142, 207, 207, 127, 141,
- /* 20 */ 140, 207, 126, 207, 207, 127, 207, 138, 139, 207,
- /* 30 */ 145, 207, 207, 152, 131, 124, 124, 144, 207, 207,
- /* 40 */ 207, 207, 161, 207, 207, 207, 180, 181, 129, 169,
- /* 50 */ 182, 170, 177, 172, 171, 178, 183, 179, 153, 150,
- /* 60 */ 156, 128, 122, 125, 155, 154, 163, 173, 151, 130,
- /* 70 */ 184, 197, 160, 159, 158, 157, 166, 167, 162, 186,
- /* 80 */ 185, 147, 148, 146, 132, 123, 121, 120, 133, 134,
- /* 90 */ 137, 174, 136, 135, 165, 164, 202, 201, 200, 199,
- /* 100 */ 203, 204, 175, 168, 206, 205, 198, 119, 190, 189,
- /* 110 */ 188, 187, 191, 192, 196, 195, 194, 193, 176,
+ /* 0 */ 213, 152, 213, 213, 213, 213, 213, 213, 213, 213,
+ /* 10 */ 213, 213, 213, 213, 146, 145, 213, 213, 130, 144,
+ /* 20 */ 143, 213, 213, 130, 213, 129, 213, 142, 213, 141,
+ /* 30 */ 213, 147, 155, 127, 148, 127, 213, 134, 213, 213,
+ /* 40 */ 213, 213, 213, 213, 213, 167, 189, 186, 187, 188,
+ /* 50 */ 177, 176, 175, 132, 190, 178, 184, 183, 185, 154,
+ /* 60 */ 161, 160, 131, 162, 128, 153, 159, 158, 179, 133,
+ /* 70 */ 125, 156, 157, 169, 205, 166, 165, 164, 163, 172,
+ /* 80 */ 173, 168, 192, 191, 150, 151, 149, 135, 126, 124,
+ /* 90 */ 123, 136, 137, 140, 180, 139, 138, 171, 170, 208,
+ /* 100 */ 207, 206, 122, 209, 210, 181, 174, 212, 211, 204,
+ /* 110 */ 203, 196, 195, 194, 193, 197, 198, 202, 201, 200,
+ /* 120 */ 199, 182,
);
/* The next thing included is series of defines which control
** various aspects of the generated parser.
@@ -473,11 +480,11 @@ static public $yy_action = array(
** self::YYERRORSYMBOL is the code number of the error symbol. If not
** defined, then do no error processing.
*/
- const YYNOCODE = 88;
+ const YYNOCODE = 91;
const YYSTACKDEPTH = 100;
- const YYNSTATE = 119;
- const YYNRULE = 88;
- const YYERRORSYMBOL = 51;
+ const YYNSTATE = 122;
+ const YYNRULE = 91;
+ const YYERRORSYMBOL = 54;
const YYERRSYMDT = 'yy0';
const YYFALLBACK = 0;
/** The next table maps tokens into fallback tokens. If a construct
@@ -561,26 +568,27 @@ static public $yy_action = array(
static public $yyTokenName = array(
'$', 'SELECT', 'AS_ALIAS', 'WHERE',
'JOIN', 'ON', 'EQ', 'PAR_OPEN',
- 'PAR_CLOSE', 'COMA', 'INTERVAL', 'F_DAY',
- 'F_MONTH', 'F_YEAR', 'DOT', 'VARNAME',
- 'NAME', 'NUMVAL', 'STRVAL', 'NOT_EQ',
- 'LOG_AND', 'LOG_OR', 'MATH_DIV', 'MATH_MULT',
- 'MATH_PLUS', 'MATH_MINUS', 'GT', 'LT',
- 'GE', 'LE', 'LIKE', 'NOT_LIKE',
- 'IN', 'NOT_IN', 'F_IF', 'F_ELT',
- 'F_COALESCE', 'F_CONCAT', 'F_SUBSTR', 'F_TRIM',
- 'F_DATE', 'F_DATE_FORMAT', 'F_CURRENT_DATE', 'F_NOW',
- 'F_TIME', 'F_TO_DAYS', 'F_FROM_DAYS', 'F_DATE_ADD',
- 'F_DATE_SUB', 'F_ROUND', 'F_FLOOR', 'error',
- 'result', 'query', 'condition', 'class_name',
- 'join_statement', 'where_statement', 'join_item', 'join_condition',
- 'field_id', 'expression_prio4', 'expression_basic', 'scalar',
- 'var_name', 'func_name', 'arg_list', 'list_operator',
- 'list', 'expression_prio1', 'operator1', 'expression_prio2',
- 'operator2', 'expression_prio3', 'operator3', 'operator4',
- 'scalar_list', 'argument', 'interval_unit', 'num_scalar',
- 'str_scalar', 'num_value', 'str_value', 'name',
- 'num_operator1', 'num_operator2', 'str_operator',
+ 'PAR_CLOSE', 'COMA', 'INTERVAL', 'F_SECOND',
+ 'F_MINUTE', 'F_HOUR', 'F_DAY', 'F_MONTH',
+ 'F_YEAR', 'DOT', 'VARNAME', 'NAME',
+ 'NUMVAL', 'STRVAL', 'NOT_EQ', 'LOG_AND',
+ 'LOG_OR', 'MATH_DIV', 'MATH_MULT', 'MATH_PLUS',
+ 'MATH_MINUS', 'GT', 'LT', 'GE',
+ 'LE', 'LIKE', 'NOT_LIKE', 'IN',
+ 'NOT_IN', 'F_IF', 'F_ELT', 'F_COALESCE',
+ 'F_CONCAT', 'F_SUBSTR', 'F_TRIM', 'F_DATE',
+ 'F_DATE_FORMAT', 'F_CURRENT_DATE', 'F_NOW', 'F_TIME',
+ 'F_TO_DAYS', 'F_FROM_DAYS', 'F_DATE_ADD', 'F_DATE_SUB',
+ 'F_ROUND', 'F_FLOOR', 'error', 'result',
+ 'query', 'condition', 'class_name', 'join_statement',
+ 'where_statement', 'join_item', 'join_condition', 'field_id',
+ 'expression_prio4', 'expression_basic', 'scalar', 'var_name',
+ 'func_name', 'arg_list', 'list_operator', 'list',
+ 'expression_prio1', 'operator1', 'expression_prio2', 'operator2',
+ 'expression_prio3', 'operator3', 'operator4', 'scalar_list',
+ 'argument', 'interval_unit', 'num_scalar', 'str_scalar',
+ 'num_value', 'str_value', 'name', 'num_operator1',
+ 'num_operator2', 'str_operator',
);
/**
@@ -623,59 +631,62 @@ static public $yy_action = array(
/* 32 */ "arg_list ::= arg_list COMA argument",
/* 33 */ "argument ::= expression_prio4",
/* 34 */ "argument ::= INTERVAL expression_prio4 interval_unit",
- /* 35 */ "interval_unit ::= F_DAY",
- /* 36 */ "interval_unit ::= F_MONTH",
- /* 37 */ "interval_unit ::= F_YEAR",
- /* 38 */ "scalar ::= num_scalar",
- /* 39 */ "scalar ::= str_scalar",
- /* 40 */ "num_scalar ::= num_value",
- /* 41 */ "str_scalar ::= str_value",
- /* 42 */ "field_id ::= name",
- /* 43 */ "field_id ::= class_name DOT name",
- /* 44 */ "class_name ::= name",
- /* 45 */ "var_name ::= VARNAME",
- /* 46 */ "name ::= NAME",
- /* 47 */ "num_value ::= NUMVAL",
- /* 48 */ "str_value ::= STRVAL",
- /* 49 */ "operator1 ::= num_operator1",
- /* 50 */ "operator2 ::= num_operator2",
- /* 51 */ "operator2 ::= str_operator",
- /* 52 */ "operator2 ::= EQ",
- /* 53 */ "operator2 ::= NOT_EQ",
- /* 54 */ "operator3 ::= LOG_AND",
- /* 55 */ "operator4 ::= LOG_OR",
- /* 56 */ "num_operator1 ::= MATH_DIV",
- /* 57 */ "num_operator1 ::= MATH_MULT",
- /* 58 */ "num_operator2 ::= MATH_PLUS",
- /* 59 */ "num_operator2 ::= MATH_MINUS",
- /* 60 */ "num_operator2 ::= GT",
- /* 61 */ "num_operator2 ::= LT",
- /* 62 */ "num_operator2 ::= GE",
- /* 63 */ "num_operator2 ::= LE",
- /* 64 */ "str_operator ::= LIKE",
- /* 65 */ "str_operator ::= NOT_LIKE",
- /* 66 */ "list_operator ::= IN",
- /* 67 */ "list_operator ::= NOT_IN",
- /* 68 */ "func_name ::= F_IF",
- /* 69 */ "func_name ::= F_ELT",
- /* 70 */ "func_name ::= F_COALESCE",
- /* 71 */ "func_name ::= F_CONCAT",
- /* 72 */ "func_name ::= F_SUBSTR",
- /* 73 */ "func_name ::= F_TRIM",
- /* 74 */ "func_name ::= F_DATE",
- /* 75 */ "func_name ::= F_DATE_FORMAT",
- /* 76 */ "func_name ::= F_CURRENT_DATE",
- /* 77 */ "func_name ::= F_NOW",
- /* 78 */ "func_name ::= F_TIME",
- /* 79 */ "func_name ::= F_TO_DAYS",
- /* 80 */ "func_name ::= F_FROM_DAYS",
- /* 81 */ "func_name ::= F_YEAR",
- /* 82 */ "func_name ::= F_MONTH",
- /* 83 */ "func_name ::= F_DAY",
- /* 84 */ "func_name ::= F_DATE_ADD",
- /* 85 */ "func_name ::= F_DATE_SUB",
- /* 86 */ "func_name ::= F_ROUND",
- /* 87 */ "func_name ::= F_FLOOR",
+ /* 35 */ "interval_unit ::= F_SECOND",
+ /* 36 */ "interval_unit ::= F_MINUTE",
+ /* 37 */ "interval_unit ::= F_HOUR",
+ /* 38 */ "interval_unit ::= F_DAY",
+ /* 39 */ "interval_unit ::= F_MONTH",
+ /* 40 */ "interval_unit ::= F_YEAR",
+ /* 41 */ "scalar ::= num_scalar",
+ /* 42 */ "scalar ::= str_scalar",
+ /* 43 */ "num_scalar ::= num_value",
+ /* 44 */ "str_scalar ::= str_value",
+ /* 45 */ "field_id ::= name",
+ /* 46 */ "field_id ::= class_name DOT name",
+ /* 47 */ "class_name ::= name",
+ /* 48 */ "var_name ::= VARNAME",
+ /* 49 */ "name ::= NAME",
+ /* 50 */ "num_value ::= NUMVAL",
+ /* 51 */ "str_value ::= STRVAL",
+ /* 52 */ "operator1 ::= num_operator1",
+ /* 53 */ "operator2 ::= num_operator2",
+ /* 54 */ "operator2 ::= str_operator",
+ /* 55 */ "operator2 ::= EQ",
+ /* 56 */ "operator2 ::= NOT_EQ",
+ /* 57 */ "operator3 ::= LOG_AND",
+ /* 58 */ "operator4 ::= LOG_OR",
+ /* 59 */ "num_operator1 ::= MATH_DIV",
+ /* 60 */ "num_operator1 ::= MATH_MULT",
+ /* 61 */ "num_operator2 ::= MATH_PLUS",
+ /* 62 */ "num_operator2 ::= MATH_MINUS",
+ /* 63 */ "num_operator2 ::= GT",
+ /* 64 */ "num_operator2 ::= LT",
+ /* 65 */ "num_operator2 ::= GE",
+ /* 66 */ "num_operator2 ::= LE",
+ /* 67 */ "str_operator ::= LIKE",
+ /* 68 */ "str_operator ::= NOT_LIKE",
+ /* 69 */ "list_operator ::= IN",
+ /* 70 */ "list_operator ::= NOT_IN",
+ /* 71 */ "func_name ::= F_IF",
+ /* 72 */ "func_name ::= F_ELT",
+ /* 73 */ "func_name ::= F_COALESCE",
+ /* 74 */ "func_name ::= F_CONCAT",
+ /* 75 */ "func_name ::= F_SUBSTR",
+ /* 76 */ "func_name ::= F_TRIM",
+ /* 77 */ "func_name ::= F_DATE",
+ /* 78 */ "func_name ::= F_DATE_FORMAT",
+ /* 79 */ "func_name ::= F_CURRENT_DATE",
+ /* 80 */ "func_name ::= F_NOW",
+ /* 81 */ "func_name ::= F_TIME",
+ /* 82 */ "func_name ::= F_TO_DAYS",
+ /* 83 */ "func_name ::= F_FROM_DAYS",
+ /* 84 */ "func_name ::= F_YEAR",
+ /* 85 */ "func_name ::= F_MONTH",
+ /* 86 */ "func_name ::= F_DAY",
+ /* 87 */ "func_name ::= F_DATE_ADD",
+ /* 88 */ "func_name ::= F_DATE_SUB",
+ /* 89 */ "func_name ::= F_ROUND",
+ /* 90 */ "func_name ::= F_FLOOR",
);
/**
@@ -1040,94 +1051,97 @@ static public $yy_action = array(
*
*/
static public $yyRuleInfo = array(
- array( 'lhs' => 52, 'rhs' => 1 ),
- array( 'lhs' => 52, 'rhs' => 1 ),
- array( 'lhs' => 53, 'rhs' => 4 ),
- array( 'lhs' => 53, 'rhs' => 6 ),
- array( 'lhs' => 57, 'rhs' => 2 ),
- array( 'lhs' => 57, 'rhs' => 0 ),
- array( 'lhs' => 56, 'rhs' => 2 ),
- array( 'lhs' => 56, 'rhs' => 1 ),
- array( 'lhs' => 56, 'rhs' => 0 ),
- array( 'lhs' => 58, 'rhs' => 6 ),
- array( 'lhs' => 58, 'rhs' => 4 ),
- array( 'lhs' => 59, 'rhs' => 3 ),
- array( 'lhs' => 54, 'rhs' => 1 ),
- array( 'lhs' => 62, 'rhs' => 1 ),
- array( 'lhs' => 62, 'rhs' => 1 ),
- array( 'lhs' => 62, 'rhs' => 1 ),
- array( 'lhs' => 62, 'rhs' => 4 ),
+ array( 'lhs' => 55, 'rhs' => 1 ),
+ array( 'lhs' => 55, 'rhs' => 1 ),
+ array( 'lhs' => 56, 'rhs' => 4 ),
+ array( 'lhs' => 56, 'rhs' => 6 ),
+ array( 'lhs' => 60, 'rhs' => 2 ),
+ array( 'lhs' => 60, 'rhs' => 0 ),
+ array( 'lhs' => 59, 'rhs' => 2 ),
+ array( 'lhs' => 59, 'rhs' => 1 ),
+ array( 'lhs' => 59, 'rhs' => 0 ),
+ array( 'lhs' => 61, 'rhs' => 6 ),
+ array( 'lhs' => 61, 'rhs' => 4 ),
array( 'lhs' => 62, 'rhs' => 3 ),
- array( 'lhs' => 62, 'rhs' => 3 ),
- array( 'lhs' => 69, 'rhs' => 1 ),
- array( 'lhs' => 69, 'rhs' => 3 ),
- array( 'lhs' => 71, 'rhs' => 1 ),
- array( 'lhs' => 71, 'rhs' => 3 ),
- array( 'lhs' => 73, 'rhs' => 1 ),
- array( 'lhs' => 73, 'rhs' => 3 ),
- array( 'lhs' => 61, 'rhs' => 1 ),
- array( 'lhs' => 61, 'rhs' => 3 ),
- array( 'lhs' => 68, 'rhs' => 3 ),
+ array( 'lhs' => 57, 'rhs' => 1 ),
+ array( 'lhs' => 65, 'rhs' => 1 ),
+ array( 'lhs' => 65, 'rhs' => 1 ),
+ array( 'lhs' => 65, 'rhs' => 1 ),
+ array( 'lhs' => 65, 'rhs' => 4 ),
+ array( 'lhs' => 65, 'rhs' => 3 ),
+ array( 'lhs' => 65, 'rhs' => 3 ),
+ array( 'lhs' => 72, 'rhs' => 1 ),
+ array( 'lhs' => 72, 'rhs' => 3 ),
+ array( 'lhs' => 74, 'rhs' => 1 ),
+ array( 'lhs' => 74, 'rhs' => 3 ),
array( 'lhs' => 76, 'rhs' => 1 ),
array( 'lhs' => 76, 'rhs' => 3 ),
- array( 'lhs' => 66, 'rhs' => 0 ),
- array( 'lhs' => 66, 'rhs' => 1 ),
- array( 'lhs' => 66, 'rhs' => 3 ),
- array( 'lhs' => 77, 'rhs' => 1 ),
- array( 'lhs' => 77, 'rhs' => 3 ),
- array( 'lhs' => 78, 'rhs' => 1 ),
- array( 'lhs' => 78, 'rhs' => 1 ),
- array( 'lhs' => 78, 'rhs' => 1 ),
- array( 'lhs' => 63, 'rhs' => 1 ),
- array( 'lhs' => 63, 'rhs' => 1 ),
- array( 'lhs' => 79, 'rhs' => 1 ),
- array( 'lhs' => 80, 'rhs' => 1 ),
- array( 'lhs' => 60, 'rhs' => 1 ),
- array( 'lhs' => 60, 'rhs' => 3 ),
- array( 'lhs' => 55, 'rhs' => 1 ),
array( 'lhs' => 64, 'rhs' => 1 ),
- array( 'lhs' => 83, 'rhs' => 1 ),
+ array( 'lhs' => 64, 'rhs' => 3 ),
+ array( 'lhs' => 71, 'rhs' => 3 ),
+ array( 'lhs' => 79, 'rhs' => 1 ),
+ array( 'lhs' => 79, 'rhs' => 3 ),
+ array( 'lhs' => 69, 'rhs' => 0 ),
+ array( 'lhs' => 69, 'rhs' => 1 ),
+ array( 'lhs' => 69, 'rhs' => 3 ),
+ array( 'lhs' => 80, 'rhs' => 1 ),
+ array( 'lhs' => 80, 'rhs' => 3 ),
array( 'lhs' => 81, 'rhs' => 1 ),
+ array( 'lhs' => 81, 'rhs' => 1 ),
+ array( 'lhs' => 81, 'rhs' => 1 ),
+ array( 'lhs' => 81, 'rhs' => 1 ),
+ array( 'lhs' => 81, 'rhs' => 1 ),
+ array( 'lhs' => 81, 'rhs' => 1 ),
+ array( 'lhs' => 66, 'rhs' => 1 ),
+ array( 'lhs' => 66, 'rhs' => 1 ),
array( 'lhs' => 82, 'rhs' => 1 ),
- array( 'lhs' => 70, 'rhs' => 1 ),
- array( 'lhs' => 72, 'rhs' => 1 ),
- array( 'lhs' => 72, 'rhs' => 1 ),
- array( 'lhs' => 72, 'rhs' => 1 ),
- array( 'lhs' => 72, 'rhs' => 1 ),
- array( 'lhs' => 74, 'rhs' => 1 ),
+ array( 'lhs' => 83, 'rhs' => 1 ),
+ array( 'lhs' => 63, 'rhs' => 1 ),
+ array( 'lhs' => 63, 'rhs' => 3 ),
+ array( 'lhs' => 58, 'rhs' => 1 ),
+ array( 'lhs' => 67, 'rhs' => 1 ),
+ array( 'lhs' => 86, 'rhs' => 1 ),
+ array( 'lhs' => 84, 'rhs' => 1 ),
+ array( 'lhs' => 85, 'rhs' => 1 ),
+ array( 'lhs' => 73, 'rhs' => 1 ),
array( 'lhs' => 75, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 1 ),
- array( 'lhs' => 86, 'rhs' => 1 ),
- array( 'lhs' => 86, 'rhs' => 1 ),
- array( 'lhs' => 67, 'rhs' => 1 ),
- array( 'lhs' => 67, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
- array( 'lhs' => 65, 'rhs' => 1 ),
+ array( 'lhs' => 75, 'rhs' => 1 ),
+ array( 'lhs' => 75, 'rhs' => 1 ),
+ array( 'lhs' => 75, 'rhs' => 1 ),
+ array( 'lhs' => 77, 'rhs' => 1 ),
+ array( 'lhs' => 78, 'rhs' => 1 ),
+ array( 'lhs' => 87, 'rhs' => 1 ),
+ array( 'lhs' => 87, 'rhs' => 1 ),
+ array( 'lhs' => 88, 'rhs' => 1 ),
+ array( 'lhs' => 88, 'rhs' => 1 ),
+ array( 'lhs' => 88, 'rhs' => 1 ),
+ array( 'lhs' => 88, 'rhs' => 1 ),
+ array( 'lhs' => 88, 'rhs' => 1 ),
+ array( 'lhs' => 88, 'rhs' => 1 ),
+ array( 'lhs' => 89, 'rhs' => 1 ),
+ array( 'lhs' => 89, 'rhs' => 1 ),
+ array( 'lhs' => 70, 'rhs' => 1 ),
+ array( 'lhs' => 70, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
+ array( 'lhs' => 68, 'rhs' => 1 ),
);
/**
@@ -1163,6 +1177,9 @@ static public $yy_action = array(
37 => 12,
38 => 12,
39 => 12,
+ 40 => 12,
+ 41 => 12,
+ 42 => 12,
16 => 16,
17 => 17,
18 => 18,
@@ -1177,54 +1194,54 @@ static public $yy_action = array(
32 => 29,
30 => 30,
34 => 34,
- 40 => 40,
- 41 => 40,
- 42 => 42,
43 => 43,
- 44 => 44,
- 68 => 44,
- 69 => 44,
- 70 => 44,
- 71 => 44,
- 72 => 44,
- 73 => 44,
- 74 => 44,
- 75 => 44,
- 76 => 44,
- 77 => 44,
- 78 => 44,
- 79 => 44,
- 80 => 44,
- 81 => 44,
- 82 => 44,
- 83 => 44,
- 84 => 44,
- 85 => 44,
- 86 => 44,
- 87 => 44,
+ 44 => 43,
45 => 45,
46 => 46,
47 => 47,
- 49 => 47,
- 50 => 47,
- 51 => 47,
- 52 => 47,
- 53 => 47,
- 54 => 47,
- 55 => 47,
- 56 => 47,
- 57 => 47,
- 58 => 47,
- 59 => 47,
- 60 => 47,
- 61 => 47,
- 62 => 47,
- 63 => 47,
- 64 => 47,
- 65 => 47,
- 66 => 47,
- 67 => 47,
+ 71 => 47,
+ 72 => 47,
+ 73 => 47,
+ 74 => 47,
+ 75 => 47,
+ 76 => 47,
+ 77 => 47,
+ 78 => 47,
+ 79 => 47,
+ 80 => 47,
+ 81 => 47,
+ 82 => 47,
+ 83 => 47,
+ 84 => 47,
+ 85 => 47,
+ 86 => 47,
+ 87 => 47,
+ 88 => 47,
+ 89 => 47,
+ 90 => 47,
48 => 48,
+ 49 => 49,
+ 50 => 50,
+ 52 => 50,
+ 53 => 50,
+ 54 => 50,
+ 55 => 50,
+ 56 => 50,
+ 57 => 50,
+ 58 => 50,
+ 59 => 50,
+ 60 => 50,
+ 61 => 50,
+ 62 => 50,
+ 63 => 50,
+ 64 => 50,
+ 65 => 50,
+ 66 => 50,
+ 67 => 50,
+ 68 => 50,
+ 69 => 50,
+ 70 => 50,
+ 51 => 51,
);
/* Beginning here are the reduction cases. A typical example
** follows:
@@ -1234,23 +1251,23 @@ static public $yy_action = array(
*/
#line 29 "oql-parser.y"
function yy_r0(){ $this->my_result = $this->yystack[$this->yyidx + 0]->minor; }
-#line 1241 "oql-parser.php"
+#line 1258 "oql-parser.php"
#line 32 "oql-parser.y"
function yy_r2(){
$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);
}
-#line 1246 "oql-parser.php"
+#line 1263 "oql-parser.php"
#line 35 "oql-parser.y"
function yy_r3(){
$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);
}
-#line 1251 "oql-parser.php"
+#line 1268 "oql-parser.php"
#line 48 "oql-parser.y"
function yy_r4(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; }
-#line 1254 "oql-parser.php"
+#line 1271 "oql-parser.php"
#line 49 "oql-parser.y"
function yy_r5(){ $this->_retvalue = null; }
-#line 1257 "oql-parser.php"
+#line 1274 "oql-parser.php"
#line 51 "oql-parser.y"
function yy_r6(){
// insert the join statement on top of the existing list
@@ -1258,80 +1275,80 @@ static public $yy_action = array(
// and return the updated array
$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
}
-#line 1265 "oql-parser.php"
+#line 1282 "oql-parser.php"
#line 57 "oql-parser.y"
function yy_r7(){
$this->_retvalue = Array($this->yystack[$this->yyidx + 0]->minor);
}
-#line 1270 "oql-parser.php"
+#line 1287 "oql-parser.php"
#line 63 "oql-parser.y"
function yy_r9(){
// 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 1276 "oql-parser.php"
+#line 1293 "oql-parser.php"
#line 68 "oql-parser.y"
function yy_r10(){
// 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 1282 "oql-parser.php"
+#line 1299 "oql-parser.php"
#line 73 "oql-parser.y"
function yy_r11(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, '=', $this->yystack[$this->yyidx + 0]->minor); }
-#line 1285 "oql-parser.php"
+#line 1302 "oql-parser.php"
#line 75 "oql-parser.y"
function yy_r12(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; }
-#line 1288 "oql-parser.php"
+#line 1305 "oql-parser.php"
#line 80 "oql-parser.y"
function yy_r16(){ $this->_retvalue = new FunctionOqlExpression($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + -1]->minor); }
-#line 1291 "oql-parser.php"
+#line 1308 "oql-parser.php"
#line 81 "oql-parser.y"
function yy_r17(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; }
-#line 1294 "oql-parser.php"
+#line 1311 "oql-parser.php"
#line 82 "oql-parser.y"
function yy_r18(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); }
-#line 1297 "oql-parser.php"
+#line 1314 "oql-parser.php"
#line 97 "oql-parser.y"
function yy_r27(){
$this->_retvalue = new ListOqlExpression($this->yystack[$this->yyidx + -1]->minor);
}
-#line 1302 "oql-parser.php"
+#line 1319 "oql-parser.php"
#line 100 "oql-parser.y"
function yy_r28(){
$this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
}
-#line 1307 "oql-parser.php"
+#line 1324 "oql-parser.php"
#line 103 "oql-parser.y"
function yy_r29(){
array_push($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor);
$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
}
-#line 1313 "oql-parser.php"
+#line 1330 "oql-parser.php"
#line 108 "oql-parser.y"
function yy_r30(){
$this->_retvalue = array();
}
-#line 1318 "oql-parser.php"
+#line 1335 "oql-parser.php"
#line 119 "oql-parser.y"
function yy_r34(){ $this->_retvalue = new IntervalOqlExpression($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); }
-#line 1321 "oql-parser.php"
-#line 128 "oql-parser.y"
- function yy_r40(){ $this->_retvalue = new ScalarOqlExpression($this->yystack[$this->yyidx + 0]->minor); }
-#line 1324 "oql-parser.php"
+#line 1338 "oql-parser.php"
#line 131 "oql-parser.y"
- function yy_r42(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor); }
-#line 1327 "oql-parser.php"
-#line 132 "oql-parser.y"
- function yy_r43(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -2]->minor); }
-#line 1330 "oql-parser.php"
-#line 133 "oql-parser.y"
- function yy_r44(){ $this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; }
-#line 1333 "oql-parser.php"
+ function yy_r43(){ $this->_retvalue = new ScalarOqlExpression($this->yystack[$this->yyidx + 0]->minor); }
+#line 1341 "oql-parser.php"
+#line 134 "oql-parser.y"
+ function yy_r45(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor); }
+#line 1344 "oql-parser.php"
+#line 135 "oql-parser.y"
+ function yy_r46(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -2]->minor); }
+#line 1347 "oql-parser.php"
#line 136 "oql-parser.y"
- function yy_r45(){ $this->_retvalue = new VariableOqlExpression(substr($this->yystack[$this->yyidx + 0]->minor, 1)); }
-#line 1336 "oql-parser.php"
-#line 138 "oql-parser.y"
- function yy_r46(){
+ function yy_r47(){ $this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; }
+#line 1350 "oql-parser.php"
+#line 139 "oql-parser.y"
+ function yy_r48(){ $this->_retvalue = new VariableOqlExpression(substr($this->yystack[$this->yyidx + 0]->minor, 1)); }
+#line 1353 "oql-parser.php"
+#line 141 "oql-parser.y"
+ function yy_r49(){
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);
@@ -1342,13 +1359,13 @@ static public $yy_action = array(
}
$this->_retvalue = new OqlName($name, $this->m_iColPrev);
}
-#line 1349 "oql-parser.php"
-#line 150 "oql-parser.y"
- function yy_r47(){$this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; }
-#line 1352 "oql-parser.php"
-#line 151 "oql-parser.y"
- function yy_r48(){$this->_retvalue=stripslashes(substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2)); }
-#line 1355 "oql-parser.php"
+#line 1366 "oql-parser.php"
+#line 153 "oql-parser.y"
+ function yy_r50(){$this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; }
+#line 1369 "oql-parser.php"
+#line 154 "oql-parser.y"
+ function yy_r51(){$this->_retvalue=stripslashes(substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2)); }
+#line 1372 "oql-parser.php"
/**
* placeholder for the left hand side in a reduce operation.
@@ -1463,7 +1480,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 1471 "oql-parser.php"
+#line 1488 "oql-parser.php"
}
/**
@@ -1615,7 +1632,7 @@ throw new OQLParserException($this->m_sSourceQuery, $this->m_iLine, $this->m_iCo
}
} while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
}
-}#line 199 "oql-parser.y"
+}#line 202 "oql-parser.y"
class OQLParserException extends OQLException
@@ -1680,4 +1697,4 @@ class OQLParser extends OQLParserRaw
}
}
-#line 1690 "oql-parser.php"
+#line 1707 "oql-parser.php"
diff --git a/core/oql/oql-parser.y b/core/oql/oql-parser.y
index 6d0a5c555..9a4831f65 100644
--- a/core/oql/oql-parser.y
+++ b/core/oql/oql-parser.y
@@ -118,6 +118,9 @@ arg_list(A) ::= arg_list(L) COMA argument(X). {
argument(A) ::= expression_prio4(X). { A = X; }
argument(A) ::= INTERVAL expression_prio4(X) interval_unit(Y). { A = new IntervalOqlExpression(X, Y); }
+interval_unit(A) ::= F_SECOND(X). { A = X; }
+interval_unit(A) ::= F_MINUTE(X). { A = X; }
+interval_unit(A) ::= F_HOUR(X). { A = X; }
interval_unit(A) ::= F_DAY(X). { A = X; }
interval_unit(A) ::= F_MONTH(X). { A = X; }
interval_unit(A) ::= F_YEAR(X). { A = X; }
diff --git a/core/userrights.class.inc.php b/core/userrights.class.inc.php
index 0e8cfb21f..e831e9363 100644
--- a/core/userrights.class.inc.php
+++ b/core/userrights.class.inc.php
@@ -50,6 +50,7 @@ abstract class UserRightsAddOnAPI
abstract public function Init(); // loads data (possible optimizations)
abstract public function CheckCredentials($sLogin, $sPassword); // returns the id of the user or false
abstract public function GetUserId($sLogin); // returns the id of the user or false
+ abstract public function GetContactId($sLogin); // returns the id of the "business" user or false
abstract public function GetFilter($sLogin, $sClass); // returns a filter object
abstract public function IsActionAllowed($iUserId, $sClass, $iActionCode, dbObjectSet $oInstances);
abstract public function IsStimulusAllowed($iUserId, $sClass, $sStimulusCode, dbObjectSet $oInstances);
@@ -171,6 +172,16 @@ class UserRights
}
}
+ public static function GetContactId($sName = '')
+ {
+ // note: returns null if the user management module is not related to the business data model
+ if (empty($sName))
+ {
+ $sName = self::$m_sUser;
+ }
+ return self::$m_oAddOn->GetContactId($sName);
+ }
+
public static function GetRealUser()
{
return self::$m_sRealUser;
diff --git a/pages/run_query.php b/pages/run_query.php
index c53a4d1fc..76cd4bad8 100644
--- a/pages/run_query.php
+++ b/pages/run_query.php
@@ -7,48 +7,21 @@ require_once('../application/startup.inc.php');
require_once('../application/loginwebpage.class.inc.php');
login_web_page::DoLogin(); // Check user rights and prompt if needed
-$sOperation = utils::ReadParam('operation', 'menu');
-$oContext = new UserContext();
-$oAppContext = new ApplicationContext();
-$iActiveNodeId = utils::ReadParam('menu', -1);
-$currentOrganization = utils::ReadParam('org_id', '');
-$oP = new iTopWebPage("iTop - Expression Evaluation", $currentOrganization);
-
-// Main program
-$sExpression = utils::ReadParam('expression', '');
-$sEncoding = utils::ReadParam('encoding', 'oql');
-
-try
+function ShowExamples($oP, $sExpression)
{
- if ($sEncoding == 'crypted')
- {
- // Translate $sExpression into a oql expression
- $sClearText = base64_decode($sExpression);
- echo "FYI: '$sClearText'
\n";
- $oFilter = DBObjectSearch::unserialize($sExpression);
- $sExpression = $oFilter->ToOQL();
- exit;
- }
- else
- {
- // leave $sExpression as is
- }
-
$aExamples = array(
"Applications" => "SELECT bizApplication",
"Changes planned on new year's day" => "SELECT bizChangeTicket AS ch WHERE ch.start_date >= '2009-12-31' AND ch.end_date <= '2010-01-01'",
"Person having an 'A' in their name" => "SELECT bizPerson AS B WHERE B.name LIKE '%A%'",
- "NW interfaces of equipment in production for customer 'Demo'" => "SELECT bizInterface AS if JOIN bizDevice AS dev ON if.device_id = dev.id WHERE if.status = 'production' AND dev.status = 'production' AND dev.org_name = 'Demo' AND if.physical_type = 'ethernet'"
+ "NW interfaces of equipment in production for customer 'Demo'" => "SELECT bizInterface AS if JOIN bizDevice AS dev ON if.device_id = dev.id WHERE if.status = 'production' AND dev.status = 'production' AND dev.org_name = 'Demo' AND if.physical_type = 'ethernet'",
+ "My tickets" => "SELECT bizIncidentTicket AS i WHERE i.agent_id = :current_contact_id",
+ "People being owner of an active ticket" => "SELECT bizPerson AS p JOIN bizIncidentTicket AS i ON i.agent_id = p.id WHERE i.ticket_status != 'Closed'",
+ "Contracts terminating in the next thirty days" => "SELECT bizContract AS c WHERE c.end_prod > NOW() AND c.end_prod < DATE_ADD(NOW(), INTERVAL 30 DAY)",
+ "Orphan tickets (opened one hour ago, still not assigned)" => "SELECT bizIncidentTicket AS i WHERE i.start_date < DATE_SUB(NOW(), INTERVAL 60 MINUTE) AND i.ticket_status = 'New'",
+ "Long lasting incidents (duration > 8 hours)" => "SELECT bizIncidentTicket AS i WHERE i.end_date > DATE_ADD(i.start_date, INTERVAL 8 HOUR)",
);
- $oP->add("