1@
2@	Cego language definition
3@	--------------------
4@	by Bjoern Lemke
5@
6@	(C)opyright 2003-2010 by Bjoern Lemke
7@
8@	This language defintion can be used in combination with the dragon parser generator
9@
10@	Status: 2.16
11@
12
13HEADER
14IGNORE	STRINGVAL
15SEPIGNORE '\t'
16SEPIGNORE ' '
17SEPIGNORE '\n'
18SEPSIGN ';'
19SEPSIGN ','
20SEPSIGN '='
21SEPSIGN '<'
22SEPSIGN '>'
23SEPSIGN ')'
24SEPSIGN '('
25SEPSIGN '['
26SEPSIGN ']'
27SEPSIGN '/'
28SEPSIGN '+'
29SEPSIGN '-'
30SEPSIGN '|'
31SEPSIGN '!'
32SEPSIGN '*'
33END
34
35TOKENSET
36[aA][dD][dD]	: ADD
37[aA][fF][tT][eE][rR]	: AFTER
38[aA][lL][iI][aA][sS]	: ALIAS
39[aA][nN][dD]	: AND
40[aA][lL][lL]	: ALL
41[aA][lL][tT][eE][rR]	: ALTER
42[aA][pP][pP][eE][nN][dD]	: APPEND
43[aA][sS]	: AS
44[aA][sS][cC]	: ASC
45[aA][sS][cC]2[iI][nN][tT]	: ASC2INT
46[aA][uU][tT][hH][oO][rR][iI][zZ][eE]	: AUTHORIZE
47[aA][uU][tT][oO][cC][oO][mM][mM][iI][tT]	: AUTOCOMMIT
48[aA][vV][gG]	: AVG
49[aA][vV][lL][tT][rR][eE][eE]	: AVLTREE
50[bB][eE][fF][oO][rR][eE]	: BEFORE
51[bB][eE][gG][iI][nN]	: BEGIN
52[bB][eE][tT][wW][eE][eE][nN]	: BETWEEN
53[bB][iI][gG][iI][nN][tT]	: BIGINT
54[bB][iI][tT][aA][nN][dD]	: BITAND
55[bB][iI][tT][oO][rR]	: BITOR
56[bB][iI][tT][xX][oO][rR]	: BITXOR
57[bB][lL][oO][bB]	: BLOB
58[bB][lL][oO][bB][sS][iI][zZ][eE]	: BLOBSIZE
59[bB][lL][oO][bB][rR][eE][fF]	: BLOBREF
60[bB][oO][oO][lL]	: BOOL
61[bB][tT][rR][eE][eE]	: BTREE
62[bB][yY]	: BY
63[cC][aA][cC][hH][eE][dD]	: CACHED
64[cC][aA][lL][lL]	: CALL
65[cC][aA][sS][eE]	: CASE
66[cC][hH][eE][cC][kK]	: CHECK
67[cC][lL][oO][bB]	: CLOB
68[cC][lL][oO][bB][sS][iI][zZ][eE]	: CLOBSIZE
69[cC][lL][oO][bB][rR][eE][fF]	: CLOBREF
70[cC][lL][oO][bB]2[sS][tT][rR]	: CLOB2STR
71[cC][lL][oO][sS][eE]	: CLOSE
72[cC][oO][mM][mM][iI][tT]	: COMMIT
73[cC][oO][lL][uU][mM][nN]	: COLUMN
74[cC][oO][nN][sS][tT][rR][aA][iI][nN][tT]	: CONSTRAINT
75[cC][oO][uU][nN][tT]	: COUNT
76[cC][oO][uU][nN][tT][eE][rR]	: COUNTER
77[cC][rR][eE][aA][tT][eE]	: CREATE
78[cC][uU][rR][sS][oO][rR]	: CURSOR
79[dD][aA][tT][eE]	: DATE
80[dD][aA][tT][eE]2[sS][tT][rR]	: DATE2STR
81[dD][aA][tT][eE]2[lL][oO][nN][gG]	: DATE2LONG
82[dD][aA][tT][eE][tT][iI][mM][eE]	: DATETIME
83[dD][eE][cC][iI][mM][aA][lL]	: DECIMAL
84[dD][eE][fF][aA][uU][lL][tT]	: DEFAULT
85[dD][eE][lL][eE][tT][eE]	: DELETETOK
86[dD][eE][sS][cC]	: DESC
87[dD][iI][sS][tT][iI][nN][cC][tT]	: DISTINCT
88[dD][iI][vV]	: DIV
89[dD][oO][uU][bB][lL][eE]	: DOUBLE
90[dD][rR][oO][pP]	: DROP
91[eE][lL][sS][eE]	: ELSE
92[eE][lL][sS][iI][fF]	: ELSIF
93[eE][nN][dD]	: END_TOKEN
94[eE][xX][cC][eE][pP][tT][iI][oO][nN]	: EXCEPTION
95[eE][xX][iI][sS][tT][sS]	: EXISTS
96[fF][aA][lL][sS][eE]	: FALSEVAL
97[fF][eE][tT][cC][hH]	: FETCH
98[fF][iI][rR][sS][tT]	: FIRST
99[fF][iI][xX][eE][dD]	: FIXED
100[fF][lL][oO][aA][tT]	: FLOAT
101[fF][oO][rR]	: FOR
102[fF][oO][rR][eE][iI][gG][nN]	: FOREIGN
103[fF][rR][oO][mM]	: FROM
104[gG][eE][tT][pP][oO][sS]	: GETPOS
105[gG][rR][oO][uU][pP]	: GROUP
106[hH][aA][vV][iI][nN][gG]	: HAVING
107[iI][dD][eE][nN][tT][iI][fF][iI][eE][dD]	: IDENTIFIED
108[iI][fF]	: IF
109[iI][nN][dD][eE][xX]	: INDEX
110[iI][nN]	: INTOK
111[iI][nN][nN][eE][rR]	: INNER
112[iI][nN][tT]	: INT
113[iI][nN][tT][oO]	: INTO
114[lL][oO][nN][gG]2[dD][aA][tT][eE]	: LONG2DATE
115[nN][eE][wW][dD][aA][tT][eE]	: NEWDATE
116[iI][nN][sS][eE][rR][tT]	: INSERT
117[iI][nN][tT]2[aA][sC][cC]	: INT2ASC
118[iI][sS]	: IS
119[iI][sS][oO][lL][aA][tT][iI][oO][nN]	: ISOLATION
120[jJ][dD][bB][cC]	: JDBC
121[jJ][oO][iI][nN]	: JOIN
122[kK][eE][yY]	: KEY
123[lL][eE][fF][tT]	: LEFT
124[lL][eE][nN][gG][tT][hH]	: LENGTH
125[lL][iI][kK][eE]	: LIKE
126[lL][iI][sS][tT]	: LIST
127[lL][dD][iI][vV]	: LDIV
128[lL][mM][oO][dD]	: LMOD
129[lL][oO][aA][dD]	: LOAD
130[lL][oO][cC][kK]	: LOCK
131[uU][nN][lL][oO][cC][kK]	: UNLOCK
132[lL][oO][nN][gG]	: LONG
133[lL][oO][wW][eE][rR]	: LOWER
134[lL][tT][rR][iI][mM]	: LTRIM
135[mM][iI][nN]	: MIN
136[mM][aA][xX]	: MAX
137[mM][oO][dD]	: MOD
138[mM][oO][dD][iI][fF][yY]	: MODIFY
139[nN][eE][xX][tT][cC][oO][uU][nN][tT]	: NEXTCOUNT
140[nN][oO][oO][pP]	: NOOP
141[nN][oO][tT]	: NOT
142[nN][uU][lL][lL]	: NULLTOKEN
143[oO][fF][fF]	: OFF
144[oO][nN]	: ON
145[oO][uU][tT]	: OUTTOK
146[oO][uU][tT][eE][rR]	: OUTER
147[oO][rR]	: OR
148[oO][rR][dD][eE][rR]	: ORDER
149[pP][lL][aA][nN]	: PLAN
150[pP][oO][oO][lL]	: POOL
151[pP][oO][wW][eE][rR]	: POWER
152[pP][rR][iI][mM][aA][rR][yY]	: PRIMARY
153[pP][rR][iI][nN][tT]	: PRINT
154[pP][rR][oO][cC][eE][dD][uU][rR][eE]	: PROCEDURE
155[qQ][uU][iI][tT]	: QUIT
156[rR][aA][nN][dD][sS][tT][rR]	: RANDSTR
157[rR][aA][nN][dD][iI][nN][tT]	: RANDINT
158[rR][bB][sS][eE][gG]	: RBSEG
159[rR][eE][fF][eE][rR][eE][nN][cC][eE][sS]	: REFERENCES
160[rR][eE][nN][aA][mM][eE]	: RENAME
161[rR][eE][oO][rR][gG][aA][nN][iI][zZ][eE]	: REORGANIZE
162[rR][eE][tT][uU][rR][nN]	: RETURNTOKEN
163[rR][eE][mM][oO][vV][eE]	: REMOVE
164[rR][eE][pP][lL][aA][cC][eE]	: REPLACE
165[rR][iI][gG][hH][tT]	: RIGHT
166[rR][oO][lL][lL][bB][aA][cC][kK]	: ROLLBACK
167[rR][oO][uU][nN][dD]	: ROUND
168[rR][oO][wW][lL][iI][mM][iI][tT]	: ROWLIMIT
169[rR][tT][rR][iI][mM]	: RTRIM
170[sS][eE][lL][eE][cC][tT]	: SELECT
171[sS][eE][tT]	: SET
172[sS][eE][tT][cC][oO][uU][nN][tT]	: SETCOUNT
173[sS][hH][oO][wW]	: SHOW
174[sS][mM][aA][lL][lL][iI][nN][tT]	: SMALLINT
175[sS][tT][aA][rR][tT]	: START_TOKEN
176[sS][tT][rR][iI][nN][gG]	: STRING
177[sS][uU][bB][sS][tT][rR]	: SUBSTR
178[sS][uU][mM]	: SUM
179[sS][yY][nN][cC]	: SYNC
180[sS][yY][sS][dD][aA][tT][eE]	: SYSDATE
181[sS][yY][sS][tT][eE][mM][sS][pP][aA][cC][eE]	: SYSTEMSPACE
182[sS][yY][sS][oO][bB][jJ]	: SYSOBJ
183[tT][aA][bB][lL][eE][iI][nN][fF][oO]	: TABLEINFO
184[tT][aA][bB][lL][eE][sS][iI][zZ][eE]	: TABLESIZE
185[tT][aA][bB][lL][eE]	: TABLE
186[tT][aA][bB][lL][eE][sS][eE][tT]	: TABLESET
187[tT][hH][eE][nN]	: THEN
188[tT][hH][rR][oO][wW]	: THROW
189[tT][iI][nN][yY][iI][nN][tT]	: TINYINT
190[tT][mM][pP][oO][bB][jJ]	: TMPOBJ
191[tT][rR][aA][nN][sS][aA][cC][tT][iI][oO][nN]	: TRANSACTION
192[tT][rR][iI][gG][gG][eE][rR]	: TRIGGER
193[tT][uU][pP][lL][eE][iI][nN][fF][oO]	: TUPLEINFO
194[sS][tT][rR]2[iI][nN][tT]	: STR2INT
195[sS][tT][rR]2[lL][oO][nN][gG]	: STR2LONG
196[sS][tT][rR]2[dD][aA][tT][eE]	: STR2DATE
197[tT][oO]	: TO
198[tT][rR][iI][mM]	: TRIM
199[tT][rR][uU][eE]	: TRUEVAL
200[tT][rR][uU][nN][cC]	: TRUNC
201[tT][rR][uU][nN][cC][aA][tT][eE]	: TRUNCATE
202[uU][nN][iI][oO][nN]	: UNION
203[uU][nN][iI][qQ][uU][eE]	: UNIQUE
204[uU][pP][dD][aA][tT][eE]	: UPDATE
205[uU][pP][tT][iI][mM][eE]	: UPTIME
206[uU][pP][pP][eE][rR]	: UPPER
207[vV][aA][rR]	: VAR
208[vV][aA][lL][uU][eE][sS]	: VALUES
209[vV][iI][eE][wW]	: VIEW
210[wW][hH][eE][nN]	: WHEN
211[wW][hH][eE][rR][eE]	: WHERE
212[wW][hH][iI][lL][eE]	: WHILE
213'|'			:	CONCAT
214'='			:	EQU
215','			:	KSEP
216'('			:	LB
217'<'			:	LT
218'>'			:	MT
219'!'			:	NEGATION
220')'			:	RB
221'['			:	LAB
222']'			:	RAB
223';'			: 	SEMICOLON
224'*'			:	STAR
225'/'			:	DIVISION
226'-'			:	MINUS
227'+'			:	PLUS
228(0|[1-9]*[0-9])		:	INTVAL
229(0|[1-9]*[0-9])'.'*[0-9]	:	FLOATVAL
230[a-zA-Z$]*[a-zA-Z0-9_]		:	IDENTIFIER
231!@ ':'[a-zA-Z]*[a-zA-Z0-9_]	@	VARREF
232[a-zA-Z]*[a-zA-Z0-9_]'.'[a-zA-Z$]*[a-zA-Z0-9_]	:	QUALIFIEDOBJ
233[a-zA-Z]*[a-zA-Z0-9_]'.'			:	QUALIFIEDPRE
234[a-zA-Z$]*[a-zA-Z0-9_]'@'[a-zA-Z]*[a-zA-Z0-9_]	:	QUALIFIEDTS
235END
236
237PRODUCTIONSET
238Start			: 	Statement SEMICOLON
239Statement		:	SYNC ; setSyncMethod
240Statement		:	LIST TABLESET ; setListTableSetMethod
241Statement		:	LIST TABLE TableSetOpt ; setListTableMethod
242Statement		:	LIST PROCEDURE  TableSetOpt ; setListProcMethod
243Statement		:	LIST VIEW TableSetOpt ; setListViewMethod
244Statement		:	LIST AVLTREE TableSetOpt ; setListIndexMethod
245Statement		:	LIST BtreeType TableSetOpt ; setListBTreeMethod
246Statement		:	LIST KEY TableSetOpt ; setListKeyMethod
247Statement		:	LIST COUNTER TableSetOpt ; setListCounterMethod
248Statement		:	LIST SYSOBJ TableSetOpt ; setListSysObjMethod
249Statement		:	LIST TMPOBJ TableSetOpt ; setListTmpObjMethod
250Statement		:	LIST CHECK TableSetOpt ; setListCheckMethod
251Statement		:	LIST TRIGGER TableSetOpt ; setListTriggerMethod
252Statement		:	LIST ALIAS TableSetOpt ; setListAliasMethod
253TableSetOpt		:	FOR IDENTIFIER ; setTableSetOpt
254TableSetOpt		:
255Statement		:	TABLEINFO ObjSpec ; setTableInfoMethod
256Statement		:	TABLESIZE ObjSpec ; setTableSizeMethod
257Statement		:	TUPLEINFO ObjSpec ; setTupleInfoMethod
258Statement		:	UPTIME ; setShowUptimeMethod
259Statement		:	SHOW POOL ; setShowPoolMethod
260Statement		:	SHOW SYSTEMSPACE ; setShowSystemSpaceMethod
261Statement		:	DESC TABLE ObjSpec ; setTableDescMethod
262Statement		:	DESC AVLTREE ObjSpec ; setIndexDescMethod
263Statement		:	DESC BtreeType ObjSpec ; setBTreeDescMethod
264Statement		:	DESC VIEW ObjSpec ; setViewDescMethod
265Statement		:	DESC FOREIGN KEY ObjSpec ; setKeyDescMethod
266Statement		:	DESC CHECK ObjSpec ; setCheckDescMethod
267Statement		:	DESC ALIAS ObjSpec ; setAliasDescMethod
268Statement		:	DESC PROCEDURE ObjSpec ; setProcDescMethod
269Statement		:	SHOW PROCEDURE ObjSpec ; setProcShowMethod
270Statement		:	SHOW VIEW ObjSpec ; setViewShowMethod
271Statement		:	SHOW CHECK ObjSpec ; setCheckShowMethod
272Statement		:	SHOW TRIGGER ObjSpec ; setTriggerShowMethod
273Statement		:	SET TABLESET IDENTIFIER ; setSetTableSetMethod
274Statement		:	AUTHORIZE IDENTIFIER IDENTIFIED BY STRINGVAL FOR IDENTIFIER ; setAuthUserMethod
275Statement		:	StartStatement ; setQueryMethod
276Statement		:	CommitStatement ; setQueryMethod
277Statement		:	RollbackStatement ; setQueryMethod
278Statement		:	LockStatement ; setQueryMethod
279Statement		:	UnlockStatement ; setQueryMethod
280Statement		:	SET APPEND ON ; setEnableAppendModeMethod
281Statement		:	SET APPEND OFF ; setDisableAppendModeMethod
282Statement		:	SET AUTOCOMMIT ON ; setEnableAutoCommitMethod
283Statement		:	SET AUTOCOMMIT OFF ; setDisableAutoCommitMethod
284Statement		:	SET ISOLATION IDENTIFIER ; setSetIsolationMethod
285Statement		:	REORGANIZE TABLE ObjSpec ; setTableReorganizeMethod
286Statement		:	REORGANIZE AVLTREE ObjSpec ; setIndexReorganizeMethod
287Statement		:	SelectStatement ; setSelectMethod
288Statement		:	PLAN SelectStatement ; setSelectPlanMethod
289Statement		:	InsertStatement ; setQueryMethod
290Statement		:	DeleteStatement ; setQueryMethod
291Statement		:	UpdateStatement ; setQueryMethod
292Statement		:	AlterStatement ; setQueryMethod
293Statement		:	RenameStatement ; setQueryMethod
294# view execs
295Statement		:	CREATE VIEW ObjSpec AS SelectStatement ; setViewCreateMethod
296Statement		:	LOAD VIEW ObjSpec AS SelectStatement ; setViewLoadMethod
297# procedure execs
298Statement		:	CREATE ProcDef ; setProcCreateMethod
299Statement		:	LOAD ProcDef ; setProcLoadMethod
300Statement		:    	CALL ObjSpec LB ProcValueListOpt RB ; setProcCallMethod
301Statement		:    	VARREF EQU CALL ObjSpec LB ProcValueListOpt RB ; setFuncCallMethod
302# table
303Statement		:	CREATE TABLE ObjSpec LB ColumnList RB  ; setUserTableCreateMethod
304Statement		:	CREATE PRIMARY IndexType ON ObjSpec LB SimpleAttrList RB CachedOpt ; setPrimaryIndexCreateMethod
305Statement		:	CREATE IndexOption IndexType IDENTIFIER ON ObjSpec LB SimpleAttrList RB CachedOpt ; setIndexCreateMethod
306CachedOpt		:	CACHED ; setCachedOption
307CachedOpt		:
308# alias
309Statement		:	CREATE ALIAS IDENTIFIER ON ObjSpec LB AliasAttrList RB  ; setAliasCreateMethod
310AliasAttrList		:	AliasAttrList KSEP AliasAttr
311AliasAttrList		:	AliasAttr
312AliasAttr		:	IDENTIFIER AS IDENTIFIER ; setAliasAttr
313
314# trigger
315Statement		:	CREATE TriggerDef ; setTriggerCreateMethod
316Statement		:	LOAD TriggerDef ; setTriggerLoadMethod
317#
318Statement		:	TRUNCATE TABLE ObjSpec ; setTableTruncateMethod
319Statement		:	DropOpt TABLE ObjSpec ; setTableDropMethod
320Statement		:	DropOpt AVLTREE ObjSpec ; setIndexDropMethod
321Statement		:	DropOpt VIEW ObjSpec ; setViewDropMethod
322Statement		:	DropOpt PROCEDURE ObjSpec ; setProcDropMethod
323Statement		:	DropOpt FOREIGN KEY ObjSpec ; setFKeyDropMethod
324Statement		:	DropOpt CHECK ObjSpec ; setCheckDropMethod
325Statement		:	DropOpt TRIGGER ObjSpec ; setTriggerDropMethod
326Statement		:	DropOpt BtreeType ObjSpec ; setBTreeDropMethod
327Statement		:	DropOpt ALIAS ObjSpec ; setAliasDropMethod
328DropOpt			:	DROP ; dropOpt1
329DropOpt			:	DROP IF EXISTS ; dropOpt2
330Statement		:	ALTER TABLE ObjSpec ADD FOREIGN KEY IDENTIFIER LB SimpleAttrList RB  REFERENCES IDENTIFIER LB SimpleAttrList RB ; setForeignKeyCreateMethod
331
332Statement		:	ALTER TABLE ObjSpec ADD CHECK IDENTIFIER ON QueryCondition ; setCheckCreateMethod
333
334
335Statement		:	SET IDENTIFIER EQU Expr ; setAssignStatementMethod
336Statement		:	PRINT Expr ; setPrintMethod
337Statement		:	CHECK AVLTREE IDENTIFIER ; setIndexCheckMethod
338# Counter
339Statement		:	CREATE COUNTER CounterId ; setCreateCounterMethod
340Statement		:	DropOpt COUNTER CounterId ; setDropCounterMethod
341Statement		:	SET COUNTER CounterId TO Expr ; setSetCounterMethod
342CounterId		:	IDENTIFIER ; setCounterId
343# JDBC info calls
344Statement		:	JDBC JdbcArgList ; setJDBCInfoMethod
345JdbcArgList		:	JdbcArgList IDENTIFIER ; jdbcArg1
346JdbcArgList		:	IDENTIFIER ; jdbcArg2
347
348#
349# Union All
350#
351UnionAllOpt		:	UNION ALL SelectStatement ; unionAllStore
352UnionAllOpt		:
353
354#
355# Triggers
356#
357TriggerDef		:    	TriggerHead BEGIN ProcStmtBlock END_TOKEN ; triggerStore
358TriggerHead		:	TRIGGER ObjSpec TriggerEvent TriggerCondition ON ObjSpec ; triggerHead
359TriggerEvent		:	BEFORE ; setTriggerBefore
360TriggerEvent		:	AFTER ; setTriggerAfter
361TriggerCondition	:	TriggerCondition OR TriggerOp
362TriggerCondition	:	TriggerOp
363TriggerOp		:	INSERT ; addInsertTrigger
364TriggerOp		:	UPDATE ; addUpdateTrigger
365TriggerOp		:	DELETETOK ; addDeleteTrigger
366
367#
368# Procedures
369#
370ProcHead		:	PROCEDURE ObjSpec LB ProcArgOpt RB ReturnOpt ; procHead
371ProcDef			:    	ProcHead  BEGIN ProcStmtBlock END_TOKEN ; procStore
372ReturnOpt		:	RETURNTOKEN DataTypeProd ; procReturnOpt
373ReturnOpt		:
374ProcArgOpt		:	ProcArgList
375ProcArgOpt		:
376ProcArgList		:	ProcArgList KSEP ProcArg
377ProcArgList		:	ProcArg
378ProcArg			:	IDENTIFIER INTOK DataTypeProd ; procArg1
379ProcArg			:	IDENTIFIER OUTTOK DataTypeProd ; procArg2
380ProcStmtBlock		:	ProcStatementList ProcExceptionList
381ProcStatementList	:	ProcStatementList ProcStatement SEMICOLON
382ProcStatementList	:	ProcStatement SEMICOLON ; procStoreBlock
383ProcStatement		:	VAR IDENTIFIER DataTypeProd ProcInitialAssignment ; procVarStatement
384ProcStatement		:	CURSOR IDENTIFIER AS SelectStatement ; procCursorCreateStatement
385ProcStatement		:	CLOSE IDENTIFIER ; procCursorCloseStatement
386ProcStatement		:	VARREF EQU Expr ; procAssignStatement
387ProcStatement		:	Expr ; procAssign2NullStatement
388ProcStatement		:	NOOP ; procNoopStatement
389ProcInitialAssignment	:	EQU Expr ; procInitialAssignment1
390ProcInitialAssignment	:	ProcNoAssignment ; procInitialAssignment2
391ProcNoAssignment	:
392ProcStatement		:	THROW Expr ; procThrowStatement
393
394# procedure queries
395ProcStatement		:	InsertStatement ; procQueryStatement
396ProcStatement		:	DeleteStatement ; procQueryStatement
397ProcStatement		:	UpdateStatement ; procQueryStatement
398ProcStatement		:	StartStatement ; procQueryStatement
399ProcStatement		:	CommitStatement ; procQueryStatement
400ProcStatement		:	RollbackStatement ; procQueryStatement
401ProcStatement		:	LockStatement ; procQueryStatement
402ProcStatement		:	UnlockStatement ; procQueryStatement
403
404#
405# Procedure return statement
406#
407ProcStatement		:	RETURNTOKEN ; procReturnStatement1
408ProcStatement		:	RETURNTOKEN Expr ; procReturnStatement2
409#
410# Procedure nested block
411#
412ProcStatement		:	ProcBlockStart ProcStmtBlock END_TOKEN ; procBlockStatement
413ProcBlockStart		:	BEGIN ; procBlockStart
414#
415# Procedure exception handling
416#
417ProcExceptionList	:	ProcExceptionList ProcExceptionStmt
418ProcExceptionList	:
419ProcExceptionStmt	:	EXCEPTION WHEN ProcExceptionType THEN ProcStatementList ; procExceptionStatement
420ProcValueListOpt	: 	ProcValueList ; procValueSpec
421ProcValueListOpt	:
422ProcValueList		:	ProcValueList KSEP Expr ; procExprValue
423ProcValueList		:	Expr ; procExprValue
424ProcExceptionType	:	IDENTIFIER ; procExceptionCondition
425#
426# Procedure if condition
427#
428ProcStatement		:	ProcIfPart ProcElsIfList ProcElseOpt END_TOKEN ; procIfStatement
429ProcIfPart		:	IF ProcIfCondition THEN ProcStmtBlock ; procStoreIfBlock
430ProcElsIfList		:	ProcElsIfOpt ProcElsIfList
431ProcElsIfList		:
432ProcElsIfOpt		:	ELSIF ProcElsIfCondition THEN ProcStmtBlock ; procStoreIfBlock
433ProcElseOpt		:	ProcElsePart ProcStmtBlock ; procStoreElseBlock
434ProcElseOpt		:
435ProcElsePart		:	ELSE ; procElsePart
436ProcIfCondition		:	ProcCondition ; procIfCondition
437ProcElsIfCondition	:	ProcCondition ; procElsIfCondition
438#
439# Procedure while loop
440#
441ProcStatement		:	WHILE ProcWhileCondition BEGIN ProcStmtBlock END_TOKEN ; procWhileStatement
442ProcWhileCondition	:	ProcCondition ; procWhileCondition
443#
444# Procedure condition and predicate
445#
446ProcCondition		: 	ProcCondition OR ProcPredicate  ; procCondition1
447ProcCondition		: 	ProcCondition AND ProcPredicate  ; procCondition2
448ProcCondition		:	ProcPredicate ; procCondition3
449ProcPredicate		:	LB ProcCondition RB ; procPredicate1
450ProcPredicate		:	Expr Comparison Expr ; procPredicate2
451ProcPredicate		:	Expr IS NULLTOKEN ; procPredicate3
452ProcPredicate		:	Expr IS NOT NULLTOKEN ; procPredicate4
453#
454# Expression, Term and Factor definitions
455#
456Expr			:	Expr PLUS Term ; procExpr1
457Expr			:	Expr MINUS Term ; procExpr2
458Expr			:	Term ; procExpr3
459Expr			:	Expr CONCAT Term ; procExpr4
460Term			:	Term STAR Factor ; procTerm1
461Term			:	Term DIVISION Factor ; procTerm2
462Term			:	Factor ; procTerm3
463Factor			:	VARREF ; procFactor1
464Factor			:	Constant ; procFactor2
465Factor			:	FETCH IDENTIFIER INTO LB FetchArgList RB ; procFactor3
466Factor			:	Attribute ; procFactor4
467Factor			:	Function ; procFactor5
468Factor			:	LB Expr RB ; procFactor6
469Factor			:	LB SelectStatement RB ; procFactor7
470Factor			:	CaseClause ; procFactor8
471Factor			:	COUNT LB STAR RB ; procFactor9
472Factor			:	SUM LB Expr RB ; procFactor10
473Factor			:	AVG LB Expr RB ; procFactor11
474Factor			:	COUNT LB Expr RB ; procFactor12
475Factor			:	MIN LB Expr RB ; procFactor13
476Factor			:	MAX LB Expr RB ; procFactor14
477#
478CaseClause		:	CasePrepare CaseConditionList ELSE Expr END_TOKEN ; caseClause
479CaseConditionList	:	CaseConditionList CaseCondition ; caseConditionList1
480CaseConditionList	:	CaseCondition ; caseConditionList2
481CaseCondition		:	WHEN QueryCondition THEN Expr ; caseCondition
482CasePrepare		:   	CASE ; casePrepare
483#
484FetchArgList		:       FetchArgList KSEP VARREF ; procStoreFetchArg1
485FetchArgList		:       VARREF  ; procStoreFetchArg2
486
487#
488# Object Creation
489#
490ColumnList		:	ColumnList KSEP KeyColumn
491ColumnList		:	KeyColumn
492KeyColumn		:	PRIMARY ColumnDesc ; setPrimaryColumn
493KeyColumn		:	ColumnDesc ; setOrdinaryColumn
494ColumnDesc		:	IDENTIFIER DataTypeProd DefaultOpt NullOpt ; setColumnDesc
495NullOpt			:	NULLTOKEN ; setNullOpt
496NullOpt			:	NOT NULLTOKEN ; setNotNullOpt
497NullOpt			:       DefaultNullOpt ; setNullOpt
498DefaultNullOpt		:
499DefaultOpt		:	DEFAULT Constant ; defaultOpt
500DefaultOpt		:	DefaultDefOpt ; defaultNullOpt
501DefaultDefOpt		:
502#
503SimpleAttrList		:	SimpleAttr  KSEP SimpleAttrList
504SimpleAttrList		:	SimpleAttr ; createSimpleAttrList
505SimpleAttr		:	IDENTIFIER ; createSimpleAttr
506IndexOption		:	UNIQUE ; setUniqueIndex
507IndexOption		:
508IndexType		:	AVLTREE ; setAVLIndex
509IndexType		:	BtreeType ; setBTreeIndex
510BtreeType		:	BTREE
511BtreeType		:	INDEX
512#
513# TA Statement
514#
515StartStatement		:	START_TOKEN TRANSACTION ; startStore
516CommitStatement		:	COMMIT ; commitStore
517RollbackStatement	:	ROLLBACK ; rollbackStore
518#
519# Lock Statement
520#
521LockStatement		:	LOCK TABLE ObjSpec ; lockStore
522UnlockStatement		:	UNLOCK TABLE ObjSpec ; unlockStore
523#
524# Insert Statement
525#
526InsertStatement		:	INSERT INTO ObjSpec InsertArgSpec InsertPrepare InsertValueSpecList ; insertStore
527InsertStatement		:	INSERT INTO ObjSpec InsertArgSpec SelectStatement ; insertBySelectStore
528InsertArgSpec		:	LB InsertArgList RB
529InsertArgSpec		:
530InsertPrepare		:	VALUES ; insertPrepare
531#
532InsertValueSpecList	:	InsertValueSpecList KSEP InsertValueSpec
533InsertValueSpecList	:	InsertValueSpec
534#
535InsertValueSpec		:	LB InsertValueList RB ; insertValueSpecStore
536InsertArgList		:	InsertArgList KSEP IDENTIFIER ; insertArg
537InsertArgList		:	IDENTIFIER ; insertArg
538InsertValueList		:	InsertValueList KSEP Expr ; insertExprValue
539InsertValueList		:	Expr ; insertExprValue
540#
541# Select Statement
542#
543SelectStatement         :       SELECT Selection FromOption ; selectStore
544FromOption              :       FROM TableSource WhereClause GroupClause OrderingClause LimitOpt UnionAllOpt
545FromOption              :       NoFromOption ; noFromOption
546NoFromOption            :
547Selection		:	DistinctOpt SelectionList ; selectSelectionStore1
548Selection		:	STAR ; selectSelectionStore2
549SelectionList		:	SelectionList KSEP SelectItem ; selectionList1
550SelectionList		:	SelectItem ; selectionList2
551SelectItem		:	Expr AliasOpt ; selectItem
552#
553TableSource		:	TableList ; selectTableListStore
554TableSource		:	JoinSpecList ; selectJoinSpecStore
555JoinSpecList		:	JoinSpecList JoinSpec
556JoinSpecList		:	Table JoinSpec
557JoinSpec		:	InnerJoin JoinTable ; selectInnerJoinStore1
558JoinSpec		:	InnerJoin JoinTable ON QueryCondition ; selectInnerJoinStore2
559JoinSpec		:	LEFT OUTER JOIN JoinTable ; selectLeftOuterJoinStore1
560JoinSpec		:	LEFT OUTER JOIN JoinTable ON QueryCondition ; selectLeftOuterJoinStore2
561JoinSpec		:	RIGHT OUTER JOIN JoinTable ; selectRightOuterJoinStore1
562JoinSpec		:	RIGHT OUTER JOIN JoinTable ON QueryCondition ; selectRightOuterJoinStore2
563#
564InnerJoin		:	INNER JOIN
565InnerJoin		:	JOIN
566TableList		:	Table KSEP TableList
567TableList		:	Table
568Table			:	ObjSpec ; selectTable1
569Table			:	ObjSpec IDENTIFIER ; selectTable2
570JoinTable		:	Table ; selectStackJoinTable
571#
572AliasOpt		:	AS IDENTIFIER ; aliasOpt
573AliasOpt		:	NoAliasOpt ; noAliasOpt
574NoAliasOpt		:
575
576GroupClause		:	GROUP BY GroupList HavingClause ; selectGroupClause
577GroupClause		:	NoGroup ; selectEmptyGroupClause
578NoGroup			:
579GroupList		:	GroupList KSEP Attribute  ; selectGroupList1
580GroupList		:	Attribute ; selectGroupList2
581
582HavingClause		:	HAVING Expr Comparison Expr ; selectHavingClause
583HavingClause		:	NoHaving ; selectEmptyHavingClause
584NoHaving		:
585
586OrderingClause		:	ORDER BY OrderingList ; selectOrderingClause
587OrderingClause		:	NoOrdering ; selectEmptyOrderingClause
588NoOrdering		:
589OrderingList		:       OrderingList KSEP Expr OrderingOpt ; selectOrderingList1
590OrderingList		:	Expr OrderingOpt ; selectOrderingList2
591OrderingOpt		:	DefaultOrderOpt ; selectOrderingAsc
592OrderingOpt		:	DESC ; selectOrderingDesc
593DefaultOrderOpt 	:	ASC
594DefaultOrderOpt 	:
595DistinctOpt		:	DISTINCT ; selectDistinctOpt
596DistinctOpt		:	NoDistinctOpt ; selectNoDistinctOpt
597NoDistinctOpt		:
598LimitOpt		:	ROWLIMIT INTVAL ; selectLimitOpt1
599LimitOpt		:	NoLimit ; selectLimitOpt2
600NoLimit			:
601
602#
603# Update Statement
604#
605
606UpdateStatement		:	UPDATE ObjSpec UpdDelAlias SET UpdateList WhereClause UpdReturnOpt ; updateStore
607UpdateList		:	UpdateList KSEP Assignment
608UpdateList		:	Assignment
609Assignment		:	IDENTIFIER EQU Expr ; updateAssignment
610UpdReturnOpt		:	RETURNTOKEN ON FIRST ReturnVarList ; returnOnFirstTrue
611UpdReturnOpt		:	RETURNTOKEN ReturnVarList ; returnOnFirstFalse
612UpdReturnOpt		:
613ReturnVarList		:	ReturnVarList KSEP ReturnVar
614ReturnVarList		:	ReturnVar
615ReturnVar		:	VARREF EQU Expr ; returnVarAssignment
616
617#
618# Delete Statement
619#
620
621DeleteStatement		:	DELETETOK FROM ObjSpec UpdDelAlias WhereClause ; deleteStore
622
623UpdDelAlias		:	IDENTIFIER ; setUpdDelAlias
624UpdDelAlias		:
625
626#
627# Alter Statement
628#
629
630AlterStatement		:	ALTER TABLE ObjSpec AlterList ; alterStore
631AlterList		:       AlterOption KSEP AlterList
632AlterList		:       AlterOption
633AlterOption		:	DROP COLUMN IDENTIFIER ; alterDropCol
634AlterOption		:	ADD COLUMN ColumnDesc ; alterAddCol
635AlterOption		:	MODIFY COLUMN ColumnDesc ; alterModCol
636AlterOption		:	MODIFY COLUMN IDENTIFIER DEFAULT Constant ; alterModDefault
637AlterOption		:	RENAME COLUMN IDENTIFIER TO IDENTIFIER ; alterRenameCol
638
639#
640# Rename Statement
641#
642
643RenameStatement		:	RENAME TABLE ObjSpec TO IDENTIFIER ; renameTable
644RenameStatement		:	RENAME AVLTREE ObjSpec TO IDENTIFIER ; renameIndex
645RenameStatement		:	RENAME BtreeType ObjSpec TO IDENTIFIER ; renameBTree
646RenameStatement		:	RENAME KEY ObjSpec TO IDENTIFIER ; renameKey
647RenameStatement		:	RENAME PROCEDURE ObjSpec TO IDENTIFIER ; renameProcedure
648RenameStatement		:	RENAME VIEW ObjSpec TO IDENTIFIER ; renameView
649RenameStatement		:	RENAME CHECK ObjSpec TO IDENTIFIER ; renameCheck
650RenameStatement		:	RENAME TRIGGER ObjSpec TO IDENTIFIER ; renameTrigger
651#
652# Functions
653#
654Function		:	INT2ASC LB ExpressionList RB ; functionNative
655Function		:	ASC2INT LB ExpressionList RB ; functionNative
656Function		:	TRIM LB ExpressionList RB ; functionNative
657Function		:	RTRIM LB ExpressionList RB ; functionNative
658Function		:	LTRIM LB ExpressionList RB ; functionNative
659Function		:	ROUND LB ExpressionList RB ; functionNative
660Function		:	DATE2STR LB ExpressionList RB ; functionNative
661Function		:	DATE2LONG LB ExpressionList RB ; functionNative
662Function		:	LONG2DATE LB ExpressionList RB ; functionNative
663Function		:	NEWDATE LB ExpressionList RB ; functionNative
664Function		:	LOWER LB ExpressionList RB ; functionNative
665Function		:	UPPER LB ExpressionList RB ; functionNative
666Function		:	LEFT LB ExpressionList RB ; functionNative
667Function		:	RIGHT LB ExpressionList RB ; functionNative
668Function		:	GETPOS LB ExpressionList RB ; functionNative
669Function		:	SUBSTR LB ExpressionList RB ; functionNative
670Function		:	REPLACE LB ExpressionList RB ; functionNative
671Function		:	LENGTH LB ExpressionList RB ; functionNative
672Function		:	TRUNC LB ExpressionList RB ; functionNative
673Function		:	STR2INT LB ExpressionList RB ; functionNative
674Function		:	STR2LONG LB ExpressionList RB ; functionNative
675Function		:	STR2DATE LB ExpressionList RB ; functionNative
676Function		:	RANDSTR LB ExpressionList RB ; functionNative
677Function		:	RANDINT LB ExpressionList RB ; functionNative
678#
679Function		:	MOD LB ExpressionList RB ; functionNative
680Function		:	DIV LB ExpressionList RB ; functionNative
681Function		:	LMOD LB ExpressionList RB ; functionNative
682Function		:	LDIV LB ExpressionList RB ; functionNative
683
684Function		:	POWER LB ExpressionList RB ; functionNative
685Function		:	BITAND LB ExpressionList RB ; functionNative
686Function		:	BITOR LB ExpressionList RB ; functionNative
687Function		:	BITXOR LB ExpressionList RB ; functionNative
688Function		:	BLOBSIZE LB ExpressionList RB ; functionNative
689Function		:	BLOBREF LB ExpressionList RB ; functionNative
690Function		:	CLOBSIZE LB ExpressionList RB ; functionNative
691Function		:	CLOBREF LB ExpressionList RB ; functionNative
692Function		:	CLOB2STR LB ExpressionList RB ; functionNative
693Function		:	NEXTCOUNT LB IDENTIFIER RB ; functionNextCount
694Function		:	SETCOUNT LB IDENTIFIER KSEP Expr RB ; functionSetCount
695#
696Function		:	ObjSpec LB ExpressionList RB ; functionUserDef1
697Function		:	ObjSpec LB RB ; functionUserDef2
698ExpressionList		:	ExpressionList KSEP Expr ; storeExprList1
699ExpressionList		:	Expr ; storeExprList2
700
701#
702# Where Clause
703#
704
705WhereClause		:	WHERE QueryCondition ; wcWhereClause
706WhereClause		:       NoWhere ; wcEmptyClause
707NoWhere			:
708QueryCondition		: 	QueryCondition AND QueryPredicate  ; wcConditionAnd
709QueryCondition		: 	QueryCondition OR QueryPredicate  ; wcConditionOr
710QueryCondition		:	QueryPredicate ; wcConditionPredicate
711# QueryCondition		:	NOT QueryPredicate ; wcConditionNotPredicate
712QueryPredicate		: 	EXISTS LB SelectStatement RB ; wcPredicateQueryExists
713# QueryPredicate		: 	NOT EXISTS LB SelectStatement RB ;  wcPredicateQueryNotExists
714# QueryPredicate		:	Expr Comparison LB SelectStatement RB ; wcPredicateQueryComp
715#
716QueryPredicate		:	Expr INTOK LB ExpressionList RB ; wcPredicateIn
717QueryPredicate		:	Expr NOT INTOK LB ExpressionList RB ; wcPredicateNotIn
718#
719QueryPredicate		:	Expr INTOK LB SelectStatement RB ; wcPredicateQueryIn
720QueryPredicate		:	Expr NOT INTOK LB SelectStatement RB ; wcPredicateQueryNotIn
721QueryPredicate		:	Expr Comparison Expr ; wcPredicateExprComp
722QueryPredicate		:	Expr BETWEEN Expr AND Expr ; wcPredicateBetween
723QueryPredicate		:	Expr IS NULLTOKEN ; wcPredicateNullComp
724QueryPredicate		:	Expr IS NOT NULLTOKEN ; wcPredicateNotNullComp
725QueryPredicate		:	Expr LIKE STRINGVAL ; wcPredicateLikeComp
726QueryPredicate		:	Expr NOT LIKE STRINGVAL ; wcPredicateNotLikeComp
727QueryPredicate		:	LB QueryCondition RB ; wcPredicateCondition
728QueryPredicate		:	NOT QueryPredicate ; wcPredicateNotPredicate
729
730#
731# Other
732#
733
734DataTypeProd		:	INT ; miscIntType
735DataTypeProd		:	LONG ; miscLongType
736DataTypeProd		:	STRING LB INTVAL RB ; miscStringType
737DataTypeProd		:	DATETIME ; miscDateTimeType
738DataTypeProd		:	BOOL ; miscBoolType
739DataTypeProd		:	BIGINT LB INTVAL RB ; miscBigIntType
740DataTypeProd		:	FLOAT ; miscFloatType
741DataTypeProd		:	DOUBLE ; miscDoubleType
742DataTypeProd		:	SMALLINT ; miscSmallIntType
743DataTypeProd		:	TINYINT ; miscTinyIntType
744DataTypeProd		:	DECIMAL LB INTVAL RB ; miscDecimalType
745DataTypeProd		:	FIXED LB DecimalDim RB ; miscFixedType
746DataTypeProd		:	BLOB ; miscBlobType
747DataTypeProd		:	CLOB ; miscClobType
748DecimalDim		:	INTVAL ; miscDecimalDim1
749DecimalDim		:	INTVAL KSEP INTVAL ; miscDecimalDim2
750Comparison		:	EQU ; miscEqualComp
751Comparison		:	NEGATION EQU ; miscNotEqualComp
752Comparison		:	LT ; miscLessComp
753Comparison		:	MT ; miscMoreComp
754Comparison		:	LT EQU ; miscLessEqualComp
755Comparison		:	MT EQU ; miscMoreEqualComp
756Attribute		:	IDENTIFIER ; miscAttribute1
757Attribute		:	QUALIFIEDOBJ ; miscAttribute2
758Attribute		:	QUALIFIEDPRE STAR ; miscAttribute3
759SignedInt		:	INTVAL ; miscIntString
760SignedInt		:	MINUS INTVAL ; miscNegatedIntString
761SignedFloat		:	FLOATVAL ; miscFloatString
762SignedFloat		:	MINUS FLOATVAL ; miscNegatedFloatString
763Constant		:	SignedInt ; miscIntValue
764Constant		:	LB LONG RB SignedInt ; miscLongValue
765Constant		:	LB BIGINT RB SignedInt ; miscBigIntValue
766Constant		:	LB SMALLINT RB SignedInt ; miscSmallIntValue
767Constant		:	LB TINYINT RB SignedInt ; miscTinyIntValue
768Constant		:	STRINGVAL ; miscStringValue
769Constant		:	SignedFloat ; miscFloatValue
770Constant		:	LB DOUBLE RB SignedFloat ; miscDoubleValue
771Constant		:	LB DECIMAL RB SignedFloat ; miscDecimalValue
772Constant		:	LB FIXED RB SignedFloat ; miscFixedValue
773Constant		:	DATE LB DateFormat KSEP DateValue RB ; miscFormatDate
774Constant		:	SYSDATE ; miscSysDate
775Constant		:	NULLTOKEN ; miscNull
776Constant		:	TRUEVAL ; miscTrueValue
777Constant		:	FALSEVAL ; miscFalseValue
778Constant		:	BLOB LAB INTVAL RAB ; miscBlobRef
779Constant		:	CLOB LAB INTVAL RAB ; miscClobRef
780DateFormat		:	STRINGVAL ; miscDateFormat
781DateValue		:	STRINGVAL ; miscDateValue
782ObjSpec			:	IDENTIFIER ; setObject1
783ObjSpec			:	QUALIFIEDOBJ ; setObject2
784ObjSpec			:	QUALIFIEDTS ; setObject3
785END
786
787
788
789
790