-
Notifications
You must be signed in to change notification settings - Fork 77
Expand file tree
/
Copy pathtestDatatype.java
More file actions
133 lines (111 loc) · 6.92 KB
/
Copy pathtestDatatype.java
File metadata and controls
133 lines (111 loc) · 6.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package test;
/*
* Date: 12-8-10
*/
import gudusoft.gsqlparser.*;
import gudusoft.gsqlparser.nodes.*;
import gudusoft.gsqlparser.stmt.TCommonBlock;
import gudusoft.gsqlparser.stmt.TCreateTableSqlStatement;
import gudusoft.gsqlparser.stmt.TSelectSqlStatement;
import gudusoft.gsqlparser.nodes.TVarDeclStmt;
import junit.framework.TestCase;
public class testDatatype extends TestCase {
public void testNvarchar(){
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvnetezza);
sqlparser.sqltext = "Select 1::nvarchar(20)";
assertTrue(sqlparser.parse() == 0);
TSelectSqlStatement selectSqlStatement = (TSelectSqlStatement)sqlparser.sqlstatements.get(0);
TResultColumn resultColumn = selectSqlStatement.getResultColumnList().getResultColumn(0);
assertTrue(resultColumn.getExpr().getExpressionType() == EExpressionType.typecast_t);
assertTrue(resultColumn.getExpr().getTypeName().getDataType() == EDataType.nvarchar_t);
assertTrue(resultColumn.getExpr().getTypeName().getLength().toString().equalsIgnoreCase("20"));
}
public void testDateAttribute(){
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvteradata);
sqlparser.sqltext = "select CAST('20120802' AS DATE FORMAT 'yyyymmdd') from b;";
assertTrue(sqlparser.parse() == 0);
TSelectSqlStatement selectSqlStatement = (TSelectSqlStatement)sqlparser.sqlstatements.get(0);
TResultColumn resultColumn = selectSqlStatement.getResultColumnList().getResultColumn(0);
TFunctionCall functionCall = resultColumn.getExpr().getFunctionCall();
TTypeName datatype = functionCall.getTypename();
assertTrue(datatype.toString().equalsIgnoreCase("DATE FORMAT 'yyyymmdd'"));
TDatatypeAttribute attribute = datatype.getDatatypeAttributeList().getElement(0);
assertTrue(attribute.getValue_literal().toString().equalsIgnoreCase("'yyyymmdd'"));
}
public void testrowtype0(){
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvoracle);
sqlparser.sqltext = "DECLARE\n" +
" SUBTYPE v_empid_subtype IS employees_temp.empid%TYPE;\n" +
" SUBTYPE v_emprec_subtype IS employees_temp%ROWTYPE; \n" +
" v_empid v_empid_subtype;\n" +
"BEGIN\n" +
" v_empid := NULL; -- this works, null constraint is not inherited\n" +
" DBMS_OUTPUT.PUT_LINE('v_emprec.deptname: ' || v_emprec.deptname); \n" +
"END;";
assertTrue(sqlparser.parse() == 0);
TCommonBlock statement = (TCommonBlock)sqlparser.sqlstatements.get(0);
TVarDeclStmt declStmt0 = (TVarDeclStmt)statement.getDeclareStatements().get(0);
TTypeName datatype0 = declStmt0.getDataType();
assertTrue(datatype0.getDatatypeAttributeList().getElement(0).getAttributeType() == EDataTypeAttribute.plsql_type_t);
TVarDeclStmt declStmt1 = (TVarDeclStmt)statement.getDeclareStatements().get(1);
TTypeName datatype1 = declStmt1.getDataType();
assertTrue(datatype1.getDatatypeAttributeList().getElement(0).getAttributeType() == EDataTypeAttribute.plsql_rowtype_t);
}
public void testVarchar(){
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvmssql);
sqlparser.sqltext = "CREATE TABLE [dbo].[DimAccount](\n" +
" [AccountKey] [int] IDENTITY(1,1) NOT NULL,\n" +
" [ParentAccountKey] [int] NULL,\n" +
" [AccountCodeAlternateKey] [int] NULL,\n" +
" [ParentAccountCodeAlternateKey] [int] NULL,\n" +
" [AccountDescription] [nvarchar](50) NULL,\n" +
" [AccountType] [nvarchar](50) NULL,\n" +
" [Operator] [nvarchar](50) NULL,\n" +
" [CustomMembers] [nvarchar](300) NULL,\n" +
" [ValueType] [nvarchar](50) NULL,\n" +
" [CustomMemberOptions] [nvarchar](200) NULL \n" +
") ON [PRIMARY];";
assertTrue(sqlparser.parse() == 0);
TCreateTableSqlStatement createTableSqlStatement = (TCreateTableSqlStatement)sqlparser.sqlstatements.get(0);
TColumnDefinition cd = createTableSqlStatement.getColumnList().getColumn(4);
assertTrue(cd.getColumnName().toString().equalsIgnoreCase("[AccountDescription]"));
assertTrue(cd.getDatatype().getDataType() == EDataType.nvarchar_t);
assertTrue(cd.getDatatype().getLength().toString().equalsIgnoreCase("50"));
//System.out.print(cd.getDatatype().getDataType());
}
public void testVerticalDatatypeExplictCast(){
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvvertica);
sqlparser.sqltext = "SELECT(FLOAT '123.5')::INT;";
assertTrue(sqlparser.parse() == 0);
TSelectSqlStatement selectSqlStatement = (TSelectSqlStatement)sqlparser.sqlstatements.get(0);
TResultColumn resultColumn = selectSqlStatement.getResultColumnList().getResultColumn(0);
TExpression expr = resultColumn.getExpr();
assertTrue(expr.getExpressionType() == EExpressionType.typecast_t);
assertTrue(expr.getTypeName().getDataType() == EDataType.int_t);
TExpression expr1 = expr.getLeftOperand();
assertTrue(expr1.getExpressionType() == EExpressionType.parenthesis_t);
TExpression expr2 = expr1.getLeftOperand();
assertTrue(expr2.getExpressionType() == EExpressionType.simple_constant_t);
assertTrue(expr2.getConstantOperand().getValue().equalsIgnoreCase("'123.5'"));
assertTrue(expr2.getConstantOperand().getCastType().getDataType() == EDataType.float_t);
}
public void testVerticalDateExplictCast(){
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvvertica);
sqlparser.sqltext = "SELECT DATE 'now'";
assertTrue(sqlparser.parse() == 0);
TSelectSqlStatement selectSqlStatement = (TSelectSqlStatement)sqlparser.sqlstatements.get(0);
TResultColumn resultColumn = selectSqlStatement.getResultColumnList().getResultColumn(0);
TExpression expr = resultColumn.getExpr();
assertTrue(expr.getExpressionType() == EExpressionType.simple_constant_t);
assertTrue(expr.getConstantOperand().getCastType().getDataType() == EDataType.date_t);
assertTrue(expr.getConstantOperand().getValue().equalsIgnoreCase("'now'"));
sqlparser.sqltext = "SELECT DATE('now')";
assertTrue(sqlparser.parse() == 0);
selectSqlStatement = (TSelectSqlStatement)sqlparser.sqlstatements.get(0);
resultColumn = selectSqlStatement.getResultColumnList().getResultColumn(0);
expr = resultColumn.getExpr();
assertTrue(expr.getExpressionType() == EExpressionType.function_t);
TFunctionCall fn = expr.getFunctionCall();
assertTrue(fn.getFunctionName().toString().equalsIgnoreCase("DATE"));
}
}