protected void assertType( String content, String typeName, int jdbcType, long length, int scale, int[] arrayDims ) { DataType type = parser.parse(text(content), null); assertThat(type).isNotNull(); assertThat(type.jdbcType()).isEqualTo(jdbcType); assertThat(type.name()).isEqualTo(typeName); assertThat(type.length()).isEqualTo(length); assertThat(type.scale()).isEqualTo(scale); assertThat(type.arrayDimensions()).isEqualTo(arrayDims); }
@Test public void shouldParseGrammarWithOneRequiredTokenAndLiteralLength() { pattern = parser.parse(TYPE, "BIT(3)"); assertThat(pattern).isNotNull(); type = pattern.match(text("BIT(3)")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(3); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("BIT"); assertThat(type.expression()).isEqualTo("BIT(3)"); assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldMatchTypeWithArrayDimensionsFollowingLengthAndScale() { pattern = parser.parse(TYPE, "DECIMAL[(M[,D])]{n}"); assertThat(pattern).isNotNull(); type = pattern.match(text("DECIMAL[3]")); assertThat(type.arrayDimensions()).containsOnly(3); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("DECIMAL"); assertThat(type.expression()).isEqualTo("DECIMAL[3]"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("DECIMAL(5,1)[3][6]")); assertThat(type.arrayDimensions()).containsOnly(3, 6); assertThat(type.length()).isEqualTo(5); assertThat(type.scale()).isEqualTo(1); assertThat(type.name()).isEqualTo("DECIMAL"); assertThat(type.expression()).isEqualTo("DECIMAL(5,1)[3][6]"); assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldParseGrammarWithOneRequiredTokenAndLength() { pattern = parser.parse(TYPE, "BIT(L)"); assertThat(pattern).isNotNull(); type = pattern.match(text("BIT(3)")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(3); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("BIT"); assertThat(type.expression()).isEqualTo("BIT(3)"); assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldParseGrammarWithOptionalTokenLists() { pattern = parser.parse(TYPE, "TEXT [CHARACTER SET]"); assertThat(pattern).isNotNull(); type = pattern.match(text("TEXT CHARACTER SET")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("TEXT CHARACTER SET"); assertThat(type.expression()).isEqualTo("TEXT CHARACTER SET"); assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldParseGrammarWithOneRequiredTokenAndLengthAndScale() { pattern = parser.parse(TYPE, "NUMBER(L,S)"); assertThat(pattern).isNotNull(); type = pattern.match(text("NUMBER ( 3, 2)")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(3); assertThat(type.scale()).isEqualTo(2); assertThat(type.name()).isEqualTo("NUMBER"); assertThat(type.expression()).isEqualTo("NUMBER(3,2)"); assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldParseGrammarWithVariableNames() { pattern = parser.parse(TYPE, "TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]"); assertThat(pattern).isNotNull(); type = pattern.match(text("TEXT(3) CHARACTER SET utf8 COLLATE utf8_bin")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(3); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("TEXT CHARACTER SET utf8 COLLATE utf8_bin"); assertThat(type.expression()).isEqualTo("TEXT(3) CHARACTER SET utf8 COLLATE utf8_bin"); assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldParseGrammarWithOneRequiredToken() { pattern = parser.parse(TYPE, "BOOLEAN"); assertThat(pattern).isNotNull(); type = pattern.match(text("BOOLEAN")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("BOOLEAN"); assertThat(type.expression()).isEqualTo("BOOLEAN"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("boolean")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("BOOLEAN"); // matches the grammar assertThat(type.expression()).isEqualTo("BOOLEAN"); // matches the grammar assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldParseGrammarWithComplexVariableNames() { pattern = parser.parse(TYPE, "CHAR[(L)] BINARY [CHARACTER SET charset_name] [COLLATE collation_name]"); assertThat(pattern).isNotNull(); type = pattern.match(text("CHAR(60) BINARY CHARACTER SET utf8 COLLATE utf8_bin")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(60); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("CHAR BINARY CHARACTER SET utf8 COLLATE utf8_bin"); assertThat(type.expression()).isEqualTo("CHAR(60) BINARY CHARACTER SET utf8 COLLATE utf8_bin"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("char ( 60 ) binary DEFAULT '' NOT NULL")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(60); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("CHAR BINARY"); assertThat(type.expression()).isEqualTo("CHAR(60) BINARY"); assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldParseGrammarWithTwoRequiredTokens() { pattern = parser.parse(TYPE, "UNSIGNED INTEGER"); assertThat(pattern).isNotNull(); type = pattern.match(text("UNSIGNED INTEGER")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("UNSIGNED INTEGER"); assertThat(type.expression()).isEqualTo("UNSIGNED INTEGER"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("unsigned integer")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("UNSIGNED INTEGER"); // matches the grammar assertThat(type.expression()).isEqualTo("UNSIGNED INTEGER"); // matches the grammar assertThat(type.jdbcType()).isEqualTo(TYPE); }
@Test public void shouldParseGrammarWithOneRequiredTokenAndLengthAndOptionalScale() { pattern = parser.parse(TYPE, "DECIMAL[(M[,D])]"); assertThat(pattern).isNotNull(); type = pattern.match(text("DECIMAL")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("DECIMAL"); assertThat(type.expression()).isEqualTo("DECIMAL"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("DECIMAL(5)")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(5); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("DECIMAL"); assertThat(type.expression()).isEqualTo("DECIMAL(5)"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("DECIMAL(5,3)")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(5); assertThat(type.scale()).isEqualTo(3); assertThat(type.name()).isEqualTo("DECIMAL"); assertThat(type.expression()).isEqualTo("DECIMAL(5,3)"); assertThat(type.jdbcType()).isEqualTo(TYPE); }
assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(3); assertThat(type.scale()).isEqualTo(-1); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(3); assertThat(type.scale()).isEqualTo(-1);
assertThat(pattern).isNotNull(); type = pattern.match(text("UNSIGNED INTEGER")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(-1); assertThat(type.scale()).isEqualTo(-1);
@Test public void shouldParseGrammarWithOneRequiredTokenAndSetOfLiteralLengths() { pattern = parser.parse(TYPE, "BIT(3 | 4 | 5)"); assertThat(pattern).isNotNull(); type = pattern.match(text("BIT(3)")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(3); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("BIT"); assertThat(type.expression()).isEqualTo("BIT(3)"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("BIT(4)")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(4); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("BIT"); assertThat(type.expression()).isEqualTo("BIT(4)"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("BIT(5)")); assertThat(type.arrayDimensions()).isNull(); assertThat(type.length()).isEqualTo(5); assertThat(type.scale()).isEqualTo(-1); assertThat(type.name()).isEqualTo("BIT"); assertThat(type.expression()).isEqualTo("BIT(5)"); assertThat(type.jdbcType()).isEqualTo(TYPE); type = pattern.match(text("BIT(2)")); assertThat(type).isNull(); }