Skip to content

Commit 9f7a6a6

Browse files
committed
Feat: IMPORT SYNOPSIS ~ AS FILE / TABLE / DEFAULT
1 parent 58c296c commit 9f7a6a6

File tree

7 files changed

+42
-16
lines changed

7 files changed

+42
-16
lines changed

traindb-catalog/src/main/java/traindb/catalog/CatalogContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ MSynopsis createSynopsis(String synopsisName, String modelName, Integer rows, Do
9595

9696
void dropSynopsis(String name) throws CatalogException;
9797

98-
void importSynopsis(String synopsisName, JSONObject exportMetadata) throws CatalogException;
98+
void importSynopsis(String synopsisName, boolean isExternal, JSONObject exportMetadata)
99+
throws CatalogException;
99100

100101
void renameSynopsis(String synopsisName, String newSynopsisName) throws CatalogException;
101102

traindb-catalog/src/main/java/traindb/catalog/JDOCatalogContext.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ public void dropSynopsis(String name) throws CatalogException {
445445
}
446446

447447
@Override
448-
public void importSynopsis(String synopsisName, JSONObject exportMetadata)
448+
public void importSynopsis(String synopsisName, boolean isExternal, JSONObject exportMetadata)
449449
throws CatalogException {
450450
try {
451451
String schemaName = (String) exportMetadata.get("schemaName");
@@ -462,7 +462,6 @@ public void importSynopsis(String synopsisName, JSONObject exportMetadata)
462462

463463
Integer rows = ((Long) exportMetadata.get("rows")).intValue();
464464
Double ratio = (Double) exportMetadata.get("ratio");
465-
boolean isExternal = (Boolean) exportMetadata.get("external");
466465

467466
MSynopsis mSynopsis = new MSynopsis(synopsisName, rows, ratio, "-", schemaName, tableName,
468467
columnNames, isExternal, mTable);

traindb-core/src/main/antlr4/traindb/sql/TrainDBSql.g4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ exportToClause
166166
;
167167

168168
importSynopsis
169-
: K_IMPORT K_SYNOPSIS synopsisName K_FROM ( synopsisBinaryString | K_FILE filenameString )?
169+
: K_IMPORT K_SYNOPSIS synopsisName synopsisTypeClause? K_FROM ( synopsisBinaryString | K_FILE filenameString )?
170170
;
171171

172172
analyzeSynopsis

traindb-core/src/main/java/traindb/engine/TrainDBQueryEngine.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ public void createSynopsis(String synopsisName, TrainDBSqlCommand.SynopsisType s
647647
T_tracer.closeTaskTime("SUCCESS");
648648

649649
if (synopsisType == TrainDBSqlCommand.SynopsisType.TABLE && conn.isStandalone()) {
650-
throw new TrainDBException("cannot create synopsis table without source DBMS connection.");
650+
throw new TrainDBException("cannot create synopsis as table without source DBMS connection.");
651651
}
652652

653653
T_tracer.openTaskTime("generate synopsis");
@@ -1364,8 +1364,9 @@ public TrainDBListResultSet exportSynopsis(String synopsisName, String exportFil
13641364
}
13651365

13661366
@Override
1367-
public TrainDBListResultSet importSynopsis(String synopsisName, String synopsisBinaryString,
1368-
String importFilename) throws Exception {
1367+
public TrainDBListResultSet importSynopsis(String synopsisName,
1368+
TrainDBSqlCommand.SynopsisType synopsisType, String synopsisBinaryString,
1369+
String importFilename) throws Exception {
13691370
T_tracer.startTaskTracer("import synopsis " + synopsisName);
13701371

13711372
T_tracer.openTaskTime("find : synopsis");
@@ -1396,11 +1397,20 @@ public TrainDBListResultSet importSynopsis(String synopsisName, String synopsisB
13961397
JSONObject json = (JSONObject) parser.parse(metadata);
13971398
T_tracer.closeTaskTime("SUCCESS");
13981399

1400+
boolean isExternal = false;
1401+
if (synopsisType == TrainDBSqlCommand.SynopsisType.FILE
1402+
|| (synopsisType == TrainDBSqlCommand.SynopsisType.DEFAULT
1403+
&& (Boolean) json.get("external"))) {
1404+
isExternal = true;
1405+
}
1406+
if (conn.isStandalone() && !isExternal) {
1407+
throw new TrainDBException("cannot import synopsis as table without source DBMS connection.");
1408+
}
1409+
13991410
T_tracer.openTaskTime("insert synopsis info");
1400-
catalogContext.importSynopsis(synopsisName, json);
1411+
catalogContext.importSynopsis(synopsisName, isExternal, json);
14011412
T_tracer.closeTaskTime("SUCCESS");
14021413

1403-
boolean isExternal = conn.isStandalone();
14041414
try {
14051415
T_tracer.openTaskTime("create synopsis table");
14061416
String schemaName = (String) json.get("schemaName");
@@ -1444,7 +1454,7 @@ public TrainDBListResultSet importSynopsis(String synopsisName, String synopsisB
14441454
// ignore
14451455
}
14461456

1447-
String msg = "failed to create synopsis " + synopsisName;
1457+
String msg = "failed to import synopsis " + synopsisName;
14481458
T_tracer.closeTaskTime(msg);
14491459
T_tracer.endTaskTracer();
14501460

traindb-core/src/main/java/traindb/sql/TrainDBSql.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@ public static TrainDBListResultSet run(TrainDBSqlCommand command, TrainDBSqlRunn
169169
case IMPORT_SYNOPSIS:
170170
TrainDBSqlImportSynopsis importSynopsis = (TrainDBSqlImportSynopsis) command;
171171
return runner.importSynopsis(importSynopsis.getSynopsisName(),
172-
importSynopsis.getSynopsisBinaryString(), importSynopsis.getImportFilename());
172+
importSynopsis.getSynopsisType(), importSynopsis.getSynopsisBinaryString(),
173+
importSynopsis.getImportFilename());
173174
case ALTER_SYNOPSIS_RENAME: {
174175
TrainDBSqlAlterSynopsis alterSynopsis = (TrainDBSqlAlterSynopsis) command;
175176
runner.renameSynopsis(alterSynopsis.getSynopsisName(), alterSynopsis.getNewSynopsisName());
@@ -418,6 +419,14 @@ public void exitExportSynopsis(TrainDBSqlParser.ExportSynopsisContext ctx) {
418419
@Override
419420
public void exitImportSynopsis(TrainDBSqlParser.ImportSynopsisContext ctx) {
420421
String synopsisName = ctx.synopsisName().getText();
422+
TrainDBSqlCommand.SynopsisType synopsisType = TrainDBSqlCommand.SynopsisType.DEFAULT;
423+
if (ctx.synopsisTypeClause() != null) {
424+
if (ctx.synopsisTypeClause().K_TABLE() != null) {
425+
synopsisType = TrainDBSqlCommand.SynopsisType.TABLE;
426+
} else if (ctx.synopsisTypeClause().K_FILE() != null) {
427+
synopsisType = TrainDBSqlCommand.SynopsisType.FILE;
428+
}
429+
}
421430
String synopsisBinaryString = null;
422431
String importFilename = null;
423432
if (ctx.synopsisBinaryString() != null) {
@@ -426,7 +435,7 @@ public void exitImportSynopsis(TrainDBSqlParser.ImportSynopsisContext ctx) {
426435
importFilename = ctx.filenameString().getText();
427436
}
428437
LOG.debug("IMPORT SYNOPSIS: name=" + synopsisName);
429-
commands.add(new TrainDBSqlImportSynopsis(synopsisName, synopsisBinaryString,
438+
commands.add(new TrainDBSqlImportSynopsis(synopsisName, synopsisType, synopsisBinaryString,
430439
importFilename));
431440
}
432441

traindb-core/src/main/java/traindb/sql/TrainDBSqlImportSynopsis.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
class TrainDBSqlImportSynopsis extends TrainDBSqlCommand {
1818
private final String synopsisName;
19+
private final SynopsisType synopsisType;
1920
private final String synopsisBinaryString;
2021
private final String importFilename;
2122

22-
TrainDBSqlImportSynopsis(String synopsisName, String synopsisBinaryString,
23-
String importFilename) {
23+
TrainDBSqlImportSynopsis(String synopsisName, SynopsisType synopsisType,
24+
String synopsisBinaryString, String importFilename) {
2425
this.synopsisName = synopsisName;
26+
this.synopsisType = synopsisType;
2527
this.synopsisBinaryString = synopsisBinaryString;
2628
this.importFilename = importFilename;
2729
}
@@ -30,6 +32,10 @@ String getSynopsisName() {
3032
return synopsisName;
3133
}
3234

35+
SynopsisType getSynopsisType() {
36+
return synopsisType;
37+
}
38+
3339
String getSynopsisBinaryString() {
3440
return synopsisBinaryString;
3541
}

traindb-core/src/main/java/traindb/sql/TrainDBSqlRunner.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@ void createSynopsis(String synopsisName, TrainDBSqlCommand.SynopsisType synopsis
8282

8383
TrainDBListResultSet exportSynopsis(String synopsisName, String exportFilename) throws Exception;
8484

85-
TrainDBListResultSet importSynopsis(String synopsisName, String synopsisBinaryString,
86-
String importFilename) throws Exception;
85+
TrainDBListResultSet importSynopsis(String synopsisName,
86+
TrainDBSqlCommand.SynopsisType synopsisType, String synopsisBinaryString,
87+
String importFilename) throws Exception;
8788

8889
void renameSynopsis(String synopsisName, String newSynopsisName) throws Exception;
8990

0 commit comments

Comments
 (0)