Skip to content

Commit c3709dc

Browse files
authored
Add support to load model file from resources (#124)
1 parent ef369ab commit c3709dc

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

hoptimator-planner/src/main/java/com/linkedin/hoptimator/planner/HoptimatorPlanner.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.linkedin.hoptimator.planner;
22

3+
import java.io.File;
34
import java.io.IOException;
5+
import java.net.URL;
6+
import java.nio.charset.StandardCharsets;
47
import java.sql.SQLException;
58
import java.util.ArrayList;
69
import java.util.Arrays;
@@ -34,6 +37,8 @@
3437
import org.apache.calcite.tools.RuleSet;
3538
import org.apache.calcite.tools.RuleSets;
3639

40+
import com.google.common.io.Resources;
41+
3742
import com.linkedin.hoptimator.catalog.Database;
3843
import com.linkedin.hoptimator.catalog.DatabaseSchema;
3944

@@ -148,7 +153,15 @@ public static HoptimatorPlanner fromModelFile(String filePath, Properties proper
148153
CalciteConnectionConfig connectionConfig = new CalciteConnectionConfigImpl(properties);
149154
CalciteConnection connection = (CalciteConnection) driver.connect("jdbc:calcite:", properties);
150155
SchemaPlus schema = connection.getRootSchema();
151-
ModelHandler modelHandler = new ModelHandler(connection, filePath); // side-effect: modifies connection
156+
ModelHandler modelHandler;
157+
if (!new File(filePath).isFile()) {
158+
URL url = Resources.getResource(filePath);
159+
String text = Resources.toString(url, StandardCharsets.UTF_8);
160+
// ModelHandler can't directly read from resources, so we use "inline:" to load it dynamically
161+
modelHandler = new ModelHandler(connection, "inline:" + text); // side-effect: modifies connection
162+
} else {
163+
modelHandler = new ModelHandler(connection, filePath); // side-effect: modifies connection
164+
}
152165
return new HoptimatorPlanner(schema);
153166
}
154167

0 commit comments

Comments
 (0)