1 package org.modeshape.sequencer.ddl.dialect.db2;
2
3 import org.modeshape.sequencer.ddl.DdlParser;
4 import org.modeshape.sequencer.ddl.DdlTokenStream;
5 import org.modeshape.sequencer.ddl.StandardDdlParser;
6
7 public class Db2DdlParser extends StandardDdlParser {
8 private static final String[] COMMENT_ON = {"COMMENT", "ON"};
9
10 private final String parserId = "DB2";
11
12 /*
13
14 * ===========================================================================================================================
15 * Data Types
16
17 |--+-SMALLINT---------------------------------------------------------------+--|
18 +-+-INTEGER-+------------------------------------------------------------+
19 | '-INT-----' |
20 +-BIGINT-----------------------------------------------------------------+
21 +-+-FLOAT--+---------------+-+-------------------------------------------+
22 | | '-(--integer--)-' | |
23 | +-REAL---------------------+ |
24 | | .-PRECISION-. | |
25 | '-DOUBLE--+-----------+----' |
26 +-+-DECIMAL-+--+-----------------------------+---------------------------+
27 | +-DEC-----+ '-(--integer--+----------+--)-' |
28 | +-NUMERIC-+ '-,integer-' |
29 | '-NUM-----' |
30 +-+-+-CHARACTER-+--+-----------+--------------+--+---------------------+-+
31 | | '-CHAR------' '-(integer)-' | | (1) | |
32 | +-+-VARCHAR----------------+--(--integer--)-+ '--------FOR BIT DATA-' |
33 | | '-+-CHARACTER-+--VARYING-' | |
34 | | '-CHAR------' | |
35 | '-LONG VARCHAR------------------------------' |
36 +-+-+-BLOB----------------+---------+--+----------------------+----------+
37 | | '-BINARY LARGE OBJECT-' | '-2 (--2 integer--+---+--2 )-' |
38 | +-+-CLOB------------------------+-+ +-2 K-+ |
39 | | '-+-CHARACTER-+--LARGE OBJECT-' | +-2 M-+ |
40 | | '-CHAR------' | '-2 G-' |
41 | '-DBCLOB--------------------------' |
42 +-GRAPHIC--+-----------+-------------------------------------------------+
43 | '-(integer)-' |
44 +-VARGRAPHIC--(integer)--------------------------------------------------+
45 +-LONG VARGRAPHIC--------------------------------------------------------+
46 +-DATE-------------------------------------------------------------------+
47 +-TIME-------------------------------------------------------------------+
48 +-TIMESTAMP--------------------------------------------------------------+
49 +-DATALINK--+---------------+--------------------------------------------+
50 | '-(--integer--)-' |
51 +-distinct-type-name-----------------------------------------------------+
52 +-structured-type-name---------------------------------------------------+
53 '-REF--(type-name2)------------------------------------------------------'
54
55
56
57 * ===========================================================================================================================
58 * Data Definition Statements
59 ALLOCATE CURSOR
60 ALTER [BUFFERPON | (DATABASE PARTITION GROUP) | DATABASE | FUNCTION | METHOD | NICKNAME | PROCEDURE | SEQUENCE | SERVER
61 | TABLE | TABLESPACE | TYPE | (USER MAPPING) | VIEW | WRAPPER]
62 ASSOCIATE LOCATORS
63 CASE
64 COMMENT ON
65 COMMIT [WORK]
66 CREATE [ALIAS | BUFFERPOOL | (DATABASE PARTITION GROUP) | (DISTINCT TYPE) | (EVENT MONITOR) | FUNCTION | (FUNCTION MAPPING)
67 | INDEX | METHOD | NICKNAME | PROCEDURE | SCHEMA | SEQUENCE | SERVER | TABLE | TABLESPACE | TRANSFORM | TRIGGER | TYPE
68 | (TYPE MAPPING) | (USER MAPPING) | VIEW | WRAPPER]
69 DECLARE GLOBAL TEMPORARY TABLE
70 DELETE FROM
71 DROP [ALIAS | BUFFERPOOL | (DATABASE PARTITION GROUP) | (EVENT MONITOR) | FUNCTION | (SPECIFIC FUNCTION) | (FUNCTION MAPPING)
72 | INDEX | (INDEX EXTENSION) | METHOD | (SPECIFIC METHOD) | NICKNAME | PACKAGE | PROCEDURE | (SPECIFIC PROCEDURE) | SCHEMA
73 | SEQUENCE | SERVER | TABLE | (TABLE HIERARCHY) | TABLESPACE[S] | TRANSFORM[S] | TRIGGER | TYPE | (TYPE MAPPING)
74 | (USER MAPPING) | (USER MAPPING FOR) | VIEW | (VIEW HIERARCHY) | WRAPPER]
75
76 */
77
78 private static final String TERMINATOR = "%";
79
80 public Db2DdlParser() {
81 super();
82 setTerminator(TERMINATOR);
83 }
84
85 /**
86 * {@inheritDoc}
87 *
88 * @see org.modeshape.sequencer.ddl.StandardDdlParser#initializeTokenStream(org.modeshape.sequencer.ddl.DdlTokenStream)
89 */
90 @Override
91 protected void initializeTokenStream( DdlTokenStream tokens ) {
92 super.initializeTokenStream(tokens);
93 tokens.registerStatementStartPhrase(COMMENT_ON);
94 }
95
96 /**
97 * {@inheritDoc}
98 *
99 * @see java.lang.Object#hashCode()
100 */
101 @Override
102 public int hashCode() {
103 return this.parserId.hashCode();
104 }
105
106 /**
107 * {@inheritDoc}
108 *
109 * @see java.lang.Object#equals(java.lang.Object)
110 */
111 @Override
112 public boolean equals( Object obj ) {
113 if (obj == this) return true;
114 if (obj instanceof DdlParser) {
115 return ((DdlParser)obj).getId().equals(this.getId());
116 }
117 return false;
118 }
119
120 }