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 }