Skip to content

Commit 6ae7bb5

Browse files
committed
Refactor: reuse a query engine object
1 parent 33ff3ce commit 6ae7bb5

File tree

4 files changed

+18
-15
lines changed

4 files changed

+18
-15
lines changed

traindb-core/src/main/java/traindb/jdbc/Driver.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,16 @@
3737
import org.apache.calcite.jdbc.CalciteConnection;
3838
import org.apache.calcite.jdbc.CalciteFactory;
3939
import org.apache.calcite.jdbc.CalcitePrepare;
40+
import org.apache.calcite.jdbc.CalcitePrepare.Context;
4041
import org.apache.calcite.jdbc.CalciteSchema;
41-
import org.apache.calcite.linq4j.function.Function0;
42+
import org.apache.calcite.linq4j.function.Function1;
4243
import org.checkerframework.checker.nullness.qual.Nullable;
4344
import traindb.prepare.TrainDBPrepareImpl;
4445
import traindb.schema.SchemaManager;
4546

4647
public class Driver extends UnregisteredDriver {
4748
public static final String CONNECT_STRING_PREFIX = "jdbc:traindb:";
48-
Function0<CalcitePrepare> DEFAULT_TRAINDB_FACTORY = TrainDBPrepareImpl::new;
49+
Function1<Context, CalcitePrepare> DEFAULT_TRAINDB_FACTORY = TrainDBPrepareImpl::new;
4950

5051
static {
5152
try {
@@ -56,15 +57,15 @@ public class Driver extends UnregisteredDriver {
5657
}
5758
}
5859

59-
final Function0<CalcitePrepare> prepareFactory;
60+
final Function1<Context, CalcitePrepare> prepareFactory;
6061

6162
@SuppressWarnings("method.invocation.invalid")
6263
public Driver() {
6364
super();
6465
this.prepareFactory = createPrepareFactory();
6566
}
6667

67-
protected Function0<CalcitePrepare> createPrepareFactory() {
68+
protected Function1<Context, CalcitePrepare> createPrepareFactory() {
6869
return DEFAULT_TRAINDB_FACTORY;
6970
}
7071

traindb-core/src/main/java/traindb/jdbc/TrainDBConnectionImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
import org.apache.calcite.linq4j.Ord;
6262
import org.apache.calcite.linq4j.QueryProvider;
6363
import org.apache.calcite.linq4j.Queryable;
64-
import org.apache.calcite.linq4j.function.Function0;
64+
import org.apache.calcite.linq4j.function.Function1;
6565
import org.apache.calcite.linq4j.tree.Expression;
6666
import org.apache.calcite.materialize.Lattice;
6767
import org.apache.calcite.materialize.MaterializationService;
@@ -110,7 +110,7 @@ public abstract class TrainDBConnectionImpl
110110
private SchemaManager schemaManager;
111111
private BasicDataSource dataSource;
112112

113-
final Function0<CalcitePrepare> prepareFactory;
113+
final Function1<Context, CalcitePrepare> prepareFactory;
114114
final CalciteServer server = new CalciteServerImpl();
115115
CalciteSchema rootSchema;
116116

@@ -369,7 +369,7 @@ <T> CalcitePrepare.CalciteSignature<T> parseQuery(
369369
Context prepareContext, long maxRowCount) {
370370
CalcitePrepare.Dummy.push(prepareContext);
371371
try {
372-
final CalcitePrepare prepare = prepareFactory.apply();
372+
final CalcitePrepare prepare = prepareFactory.apply(prepareContext);
373373
return prepare.prepareSql(prepareContext, query, Object[].class,
374374
maxRowCount);
375375
} finally {

traindb-core/src/main/java/traindb/jdbc/TrainDBStatement.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ public TrainDBConnectionImpl getConnection() {
6767
public <T> CalcitePrepare.CalciteSignature<T> prepare(
6868
Queryable<T> queryable) {
6969
final TrainDBConnectionImpl calciteConnection = getConnection();
70-
final CalcitePrepare prepare = calciteConnection.prepareFactory.apply();
7170
final CalciteServerStatement serverStatement;
7271
try {
7372
serverStatement = calciteConnection.server.getStatement(handle);
@@ -76,6 +75,7 @@ public <T> CalcitePrepare.CalciteSignature<T> prepare(
7675
}
7776
final CalcitePrepare.Context prepareContext =
7877
serverStatement.createPrepareContext();
78+
final CalcitePrepare prepare = calciteConnection.prepareFactory.apply(prepareContext);
7979
return prepare.prepareQueryable(prepareContext, queryable);
8080
}
8181

traindb-core/src/main/java/traindb/prepare/TrainDBPrepareImpl.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,11 @@ public class TrainDBPrepareImpl extends CalcitePrepareImpl {
144144
* plan. If not, enumerable convention is the default. */
145145
public final boolean enableBindable = Hook.ENABLE_BINDABLE.get(false);
146146

147-
public TrainDBPrepareImpl() {
147+
private TrainDBQueryEngine queryEngine;
148+
149+
public TrainDBPrepareImpl(Context context) {
150+
queryEngine = new TrainDBQueryEngine(
151+
(TrainDBConnectionImpl) context.getDataContext().getQueryProvider());
148152
}
149153

150154
@Override public ParseResult parse(
@@ -620,19 +624,18 @@ <T> CalciteSignature<T> prepare2_(
620624
String currentUser = conn.getProperties().getProperty("user");
621625

622626
if (commands != null && commands.size() > 0) {
623-
TrainDBQueryEngine engine = new TrainDBQueryEngine(conn);
624627
try {
625628
// INSERT QUERY LOGS
626-
engine.insertQueryLogs(currentTime, currentUser, query.sql);
629+
queryEngine.insertQueryLogs(currentTime, currentUser, query.sql);
627630

628631
return convertResultToSignature(context, query.sql,
629-
TrainDBSql.run(commands.get(0), engine));
632+
TrainDBSql.run(commands.get(0), queryEngine));
630633
} catch (Exception e) {
631634
throw new RuntimeException(
632635
"failed to run statement: " + query + "\nerror msg: " + e.getMessage());
633636
} finally {
634637
try {
635-
engine.insertTask();
638+
queryEngine.insertTask();
636639
} catch ( Exception e) {
637640
throw new RuntimeException(
638641
"failed to run statement: " + query + "\nerror msg: " + e.getMessage());
@@ -652,8 +655,7 @@ <T> CalciteSignature<T> prepare2_(
652655

653656
// INSERT QUERY LOGS
654657
try {
655-
TrainDBQueryEngine engine = new TrainDBQueryEngine(conn);
656-
engine.insertQueryLogs(currentTime, currentUser, query.sql);
658+
queryEngine.insertQueryLogs(currentTime, currentUser, query.sql);
657659
} catch (Exception e) {
658660
throw new RuntimeException(
659661
"failed to query logging: " + query + "\nerror msg: " + e.getMessage());

0 commit comments

Comments
 (0)