View Javadoc

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 }