11package sqlancer .databend ;
22
3- import sqlancer .IgnoreMeException ;
4- import sqlancer .Randomly ;
5- import sqlancer .SQLConnection ;
6- import sqlancer .common .DBMSCommon ;
7- import sqlancer .common .schema .*;
8- import sqlancer .databend .DatabendProvider .DatabendGlobalState ;
9- import sqlancer .databend .DatabendSchema .DatabendTable ;
10-
113import java .sql .ResultSet ;
124import java .sql .SQLException ;
135import java .sql .Statement ;
146import java .util .ArrayList ;
157import java .util .Collections ;
168import java .util .List ;
179
10+ import sqlancer .IgnoreMeException ;
11+ import sqlancer .Randomly ;
12+ import sqlancer .SQLConnection ;
13+ import sqlancer .common .DBMSCommon ;
14+ import sqlancer .common .schema .AbstractRelationalTable ;
15+ import sqlancer .common .schema .AbstractSchema ;
16+ import sqlancer .common .schema .AbstractTableColumn ;
17+ import sqlancer .common .schema .AbstractTables ;
18+ import sqlancer .common .schema .TableIndex ;
19+ import sqlancer .databend .DatabendProvider .DatabendGlobalState ;
20+ import sqlancer .databend .DatabendSchema .DatabendTable ;
21+
1822public class DatabendSchema extends AbstractSchema <DatabendGlobalState , DatabendTable > {
1923
2024 public enum DatabendDataType {
2125
2226 INT , VARCHAR , BOOLEAN , FLOAT , NULL ;
23- //, DATE, TIMESTAMP
27+ // , DATE, TIMESTAMP
2428
2529 public static DatabendDataType getRandomWithoutNull () {
2630 DatabendDataType dt ;
@@ -74,8 +78,8 @@ public static DatabendCompositeDataType getRandomWithoutNull() {
7478 break ;
7579 case BOOLEAN :
7680 case VARCHAR :
77- // case DATE:
78- // case TIMESTAMP:
81+ // case DATE:
82+ // case TIMESTAMP:
7983 size = 0 ;
8084 break ;
8185 default :
@@ -114,10 +118,10 @@ public String toString() {
114118 }
115119 case BOOLEAN :
116120 return Randomly .fromOptions ("BOOLEAN" , "BOOL" );
117- // case TIMESTAMP:
118- // return Randomly.fromOptions("TIMESTAMP", "DATETIME");
119- // case DATE:
120- // return Randomly.fromOptions("DATE");
121+ // case TIMESTAMP:
122+ // return Randomly.fromOptions("TIMESTAMP", "DATETIME");
123+ // case DATE:
124+ // return Randomly.fromOptions("DATE");
121125 case NULL :
122126 return Randomly .fromOptions ("NULL" );
123127 default :
@@ -132,7 +136,8 @@ public static class DatabendColumn extends AbstractTableColumn<DatabendTable, Da
132136 private final boolean isPrimaryKey ;
133137 private final boolean isNullable ;
134138
135- public DatabendColumn (String name , DatabendCompositeDataType columnType , boolean isPrimaryKey , boolean isNullable ) {
139+ public DatabendColumn (String name , DatabendCompositeDataType columnType , boolean isPrimaryKey ,
140+ boolean isNullable ) {
136141 super (name , null , columnType );
137142 this .isPrimaryKey = isPrimaryKey ;
138143 this .isNullable = isNullable ;
@@ -201,12 +206,12 @@ private static DatabendCompositeDataType getColumnType(String typeString) {
201206 case "BOOLEAN" :
202207 primitiveType = DatabendDataType .BOOLEAN ;
203208 break ;
204- // case "DATE":
205- // primitiveType = DatabendDataType.DATE;
206- // break;
207- // case "TIMESTAMP":
208- // primitiveType = DatabendDataType.TIMESTAMP;
209- // break;
209+ // case "DATE":
210+ // primitiveType = DatabendDataType.DATE;
211+ // break;
212+ // case "TIMESTAMP":
213+ // primitiveType = DatabendDataType.TIMESTAMP;
214+ // break;
210215 case "NULL" :
211216 primitiveType = DatabendDataType .NULL ;
212217 break ;
@@ -230,12 +235,12 @@ public DatabendTable(String tableName, List<DatabendColumn> columns, boolean isV
230235
231236 public static DatabendSchema fromConnection (SQLConnection con , String databaseName ) throws SQLException {
232237 List <DatabendTable > databaseTables = new ArrayList <>();
233- List <String > tableNames = getTableNames (con ,databaseName );
238+ List <String > tableNames = getTableNames (con , databaseName );
234239 for (String tableName : tableNames ) {
235240 if (DBMSCommon .matchesIndexName (tableName )) {
236241 continue ; // TODO: unexpected?
237242 }
238- List <DatabendColumn > databaseColumns = getTableColumns (con , tableName ,databaseName );
243+ List <DatabendColumn > databaseColumns = getTableColumns (con , tableName , databaseName );
239244 boolean isView = tableName .startsWith ("v" );
240245 DatabendTable t = new DatabendTable (tableName , databaseColumns , isView );
241246 for (DatabendColumn c : databaseColumns ) {
@@ -250,50 +255,55 @@ public static DatabendSchema fromConnection(SQLConnection con, String databaseNa
250255 private static List <String > getTableNames (SQLConnection con , String databaseName ) throws SQLException {
251256 List <String > tableNames = null ;
252257 tableNames = new ArrayList <>();
253- //SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema != 'system' and table_schema != 'INFORMATION_SCHEMA' and table_type='BASE TABLE'
254- //"SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '%s' and table_type='BASE TABLE' ",databaseName
258+ // SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema != 'system' and table_schema !=
259+ // 'INFORMATION_SCHEMA' and table_type='BASE TABLE'
260+ // "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '%s' and table_type='BASE TABLE' ",databaseName
255261 final String sqlStatement = String .format (
256- "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '%s' and table_type='BASE TABLE' " ,databaseName );
262+ "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '%s' and table_type='BASE TABLE' " ,
263+ databaseName );
257264 try (Statement s = con .createStatement ()) {
258265 try (ResultSet rs = s .executeQuery (sqlStatement )) {
259- try { // 没有catch的话rs.next()会报SQLException:Not a navigable ResultSet
266+ try { // 没有catch的话rs.next()会报SQLException:Not a navigable ResultSet
260267 while (rs .next ()) {
261268 tableNames .add (rs .getString ("table_name" ));
262269 }
263- } catch (Exception e ){
264- // e.printStackTrace();
270+ } catch (Exception e ) {
271+ // e.printStackTrace();
265272 System .out .println ("TableNames->SQLException:Not a navigable ResultSet" );
266273 }
267274 }
268275 }
269276 return tableNames ;
270277 }
271278
272- private static List <DatabendColumn > getTableColumns (SQLConnection con , String tableName , String databaseName ) throws SQLException {
279+ private static List <DatabendColumn > getTableColumns (SQLConnection con , String tableName , String databaseName )
280+ throws SQLException {
273281 List <DatabendColumn > columns = new ArrayList <>();
274282 try (Statement s = con .createStatement ()) {
275283 try (ResultSet rs = s .executeQuery (String .format (
276284 "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = '%s' and table_name ='%s'" ,
277- databaseName ,tableName ))) {
278- try { //没有catch的话rs.next()会报SQLException:Not a navigable ResultSet
285+ databaseName , tableName ))) {
286+ try { // 没有catch的话rs.next()会报SQLException:Not a navigable ResultSet
279287 while (rs .next ()) {
280288 String columnName = rs .getString ("column_name" );
281289 String dataType = rs .getString ("data_type" );
282290 boolean isNullable = rs .getBoolean ("is_nullable" );
283- // boolean isPrimaryKey = rs.getString("pk").contains("true");
284- boolean isPrimaryKey = false ; //没找到主键元数据
285- DatabendColumn c = new DatabendColumn (columnName , getColumnType (dataType ), isPrimaryKey , isNullable );
291+ // boolean isPrimaryKey = rs.getString("pk").contains("true");
292+ boolean isPrimaryKey = false ; // 没找到主键元数据
293+ DatabendColumn c = new DatabendColumn (columnName , getColumnType (dataType ), isPrimaryKey ,
294+ isNullable );
286295 columns .add (c );
287296 }
288297 } catch (Exception e ) {
289298 System .out .println ("TableColumns->SQLException:Not a navigable ResultSet" );
290299 }
291300 }
292301 }
293- if (columns .stream ().noneMatch (c -> c .isPrimaryKey ())) {
294- // TODO: implement an option to enable/disable rowids
295- // columns.add(new DatabendColumn("rowid", new DatabendCompositeDataType(DatabendDataType.INT, 4), false, false));
296- }
302+ // if (columns.stream().noneMatch(c -> c.isPrimaryKey())) {
303+ // TODO: implement an option to enable/disable rowids
304+ // columns.add(new DatabendColumn("rowid", new DatabendCompositeDataType(DatabendDataType.INT, 4), false,
305+ // false));
306+ // }
297307 return columns ;
298308 }
299309
0 commit comments