Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ programs.
Person bob = new Person("Bob", 30, charlie);
Person alice = new Person("Alice", 28, bob);

Estore db = new Estore("exampleDb", new EstoreOptions().useUnsafe(false));
Estore db = new Estore("exampleDb");
db.captureAll(alice);

// MATCH finds Person objects; RETURN puts them in column p
Expand Down
2 changes: 1 addition & 1 deletion estore/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@
<jdk>[9,)</jdk>
</activation>
<properties>
<test.jvm.add.opens>--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.sql=ALL-UNNAMED --add-opens jdk.unsupported/sun.misc=ALL-UNNAMED</test.jvm.add.opens>
<test.jvm.add.opens>--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.sql=ALL-UNNAMED</test.jvm.add.opens>
</properties>
</profile>
</profiles>
Expand Down
5 changes: 1 addition & 4 deletions estore/scripts/gen_usecase_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,13 @@ def generate_json(data_type):
queries = ["getCatalogs", "getSchemas", "getTables"]
implementations = {
"egraph-reflection": "\\ToolReflection",
"egraph-unsafe": "\\ToolUnsafe",
"jdbc": "\\JDBC"
}
test_class = "H2MetadataTest"
elif data_type == 'egraph':
queries = ["dbName", "options", "dynamicClass"]
implementations = {
"egraph-reflection": "\\ToolReflection",
"egraph-unsafe": "\\ToolUnsafe",
}
test_class = "EstoreMetadataTest"

Expand All @@ -61,10 +59,9 @@ def generate_json(data_type):
}
}
else:
use_unsafe = "true" if impl == "egraph-unsafe" else "false"
queryName = query[0].upper() + query[1:] if data_type == 'egraph' else query[3:]
suffix = "ESTORE" if data_type == 'h2' else ""
command = f"mvn test -Dtest={test_class}#test{queryName}{suffix}Repeat -DuseUnsafe={use_unsafe} -Dprofile=true"
command = f"mvn test -Dtest={test_class}#test{queryName}{suffix}Repeat -Dprofile=true"
# print(command)
metrics = ["Parse Tree Generation Time", "Query Plan AST Building Time", "Query Execution Time", "Total Query Time"]
metric_data = {metric: [] for metric in metrics}
Expand Down
40 changes: 12 additions & 28 deletions estore/src/main/java/org/estore/Estore.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.estore.planner.LogicalPlanBuilder;
import org.estore.planner.util.ClassInfo;
import org.estore.planner.util.Table;
import sun.misc.Unsafe;

public class Estore implements Serializable {
private String name;
Expand All @@ -34,7 +33,6 @@ public class Estore implements Serializable {
*/
private HashMap<String, ClassInfo> runtimeClassInfoMap;

private Unsafe unsafe;
private EstoreOptions options;
private int id;
private ArrayList<Class> dynamicClasses;
Expand Down Expand Up @@ -70,18 +68,12 @@ public Estore(String name) throws Exception {
public Estore(String name, EstoreOptions options) throws Exception {
this.name = name;
this.options = options;
this.unsafe = null;
this.id = 0;
datastore = new HashMap<Long, Object>();
labelObjectMap = new LabelMap();
labelClassInfoMap = new HashMap<String, ClassInfo>();
runtimeClassInfoMap = new HashMap<String, ClassInfo>();
dynamicClasses = new ArrayList<Class>();
if (options.getUseUnsafe()) {
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
unsafe = (Unsafe) f.get(null);
}
}

public void addDynamicClass(Class<?> klass) {
Expand Down Expand Up @@ -121,7 +113,7 @@ public void insert(Object obj) throws EstoreException {
}
datastore.put(objHashCode, obj);
if (labelObjectMap.get(className) == null) {
cInfo = labelObjectMap.putNew(objClass, new ArrayList<Object>(), options, unsafe);
cInfo = labelObjectMap.putNew(objClass, new ArrayList<Object>());
labelClassInfoMap.put(className, cInfo);
}
labelObjectMap.get(className).add(obj);
Expand Down Expand Up @@ -178,15 +170,14 @@ public void captureAllBfs(Object obj) throws EstoreException {
if (current instanceof Class) {
if (labelClassInfoMap.get(Class.class.getName()) == null) {
ClassInfo classCInfo =
labelObjectMap.putNew(
Class.class, new ArrayList<>(), options, unsafe);
labelObjectMap.putNew(Class.class, new ArrayList<>());
labelClassInfoMap.put(Class.class.getName(), classCInfo);
}
cInfo = labelClassInfoMap.get(Class.class.getName());
labelObjectMap.put(className, labelList);
labelClassInfoMap.put(className, cInfo); /* for query execution by label */
} else {
cInfo = labelObjectMap.putNew(objClass, labelList, options, unsafe);
cInfo = labelObjectMap.putNew(objClass, labelList);
labelClassInfoMap.put(className, cInfo);
}
} else {
Expand Down Expand Up @@ -274,15 +265,14 @@ public void captureAllDfs(Object obj) throws EstoreException {
if (current instanceof Class) {
if (labelClassInfoMap.get(Class.class.getName()) == null) {
ClassInfo classCInfo =
labelObjectMap.putNew(
Class.class, new ArrayList<>(), options, unsafe);
labelObjectMap.putNew(Class.class, new ArrayList<>());
labelClassInfoMap.put(Class.class.getName(), classCInfo);
}
cInfo = labelClassInfoMap.get(Class.class.getName());
labelObjectMap.put(className, labelList);
labelClassInfoMap.put(className, cInfo);
} else {
cInfo = labelObjectMap.putNew(objClass, labelList, options, unsafe);
cInfo = labelObjectMap.putNew(objClass, labelList);
labelClassInfoMap.put(className, cInfo);
}
} else {
Expand Down Expand Up @@ -366,15 +356,14 @@ public void captureAllDfsRec(Object obj) throws EstoreException {
ArrayList<Object> labelList = new ArrayList<Object>();
if (obj instanceof Class) {
if (labelClassInfoMap.get(Class.class.getName()) == null) {
ClassInfo classCInfo =
labelObjectMap.putNew(Class.class, new ArrayList<>(), options, unsafe);
ClassInfo classCInfo = labelObjectMap.putNew(Class.class, new ArrayList<>());
labelClassInfoMap.put(Class.class.getName(), classCInfo);
}
cInfo = labelClassInfoMap.get(Class.class.getName());
labelObjectMap.put(className, labelList);
labelClassInfoMap.put(className, cInfo);
} else {
cInfo = labelObjectMap.putNew(objClass, labelList, options, unsafe);
cInfo = labelObjectMap.putNew(objClass, labelList);
labelClassInfoMap.put(className, cInfo);
}
} else {
Expand Down Expand Up @@ -457,15 +446,14 @@ public void captureAll(Object obj, int maxDepth, int currDepth) throws EstoreExc
ArrayList<Object> labelList = new ArrayList<Object>();
if (obj instanceof Class) {
if (labelClassInfoMap.get(Class.class.getName()) == null) {
ClassInfo classCInfo =
labelObjectMap.putNew(Class.class, new ArrayList<>(), options, unsafe);
ClassInfo classCInfo = labelObjectMap.putNew(Class.class, new ArrayList<>());
labelClassInfoMap.put(Class.class.getName(), classCInfo);
}
cInfo = labelClassInfoMap.get(Class.class.getName());
labelObjectMap.put(className, labelList);
labelClassInfoMap.put(className, cInfo);
} else {
cInfo = labelObjectMap.putNew(objClass, labelList, options, unsafe);
cInfo = labelObjectMap.putNew(objClass, labelList);
labelClassInfoMap.put(className, cInfo);
}
} else {
Expand Down Expand Up @@ -555,7 +543,7 @@ private ClassInfo getOrCreateClassInfo(Class<?> clazz) {
String key = clazz.getName();
ClassInfo cInfo = runtimeClassInfoMap.get(key);
if (cInfo != null) return cInfo;
cInfo = ClassInfo.getClassInfo(options.getUseUnsafe(), unsafe, clazz);
cInfo = ClassInfo.getClassInfo(clazz);
try {
for (Field f : getDeclaredFieldsIncludingSuper(clazz)) {
try {
Expand Down Expand Up @@ -694,12 +682,8 @@ public String getString(Object obj, String fieldName) throws EstoreException {
}

public static class LabelMap extends HashMap<String, ArrayList<Object>> {
public ClassInfo putNew(
Class classInstance,
ArrayList<Object> value,
EstoreOptions options,
Unsafe unsafe) {
ClassInfo cInfo = ClassInfo.getClassInfo(options.getUseUnsafe(), unsafe, classInstance);
public ClassInfo putNew(Class classInstance, ArrayList<Object> value) {
ClassInfo cInfo = ClassInfo.getClassInfo(classInstance);
if (classInstance.isArray()) {
super.put(classInstance.getName(), value);
return cInfo;
Expand Down
11 changes: 0 additions & 11 deletions estore/src/main/java/org/estore/EstoreOptions.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.estore;

public class EstoreOptions {
private boolean useUnsafe;
private boolean useDfs;
private boolean useRecursion;
private boolean profileParseTreeGenTime;
Expand All @@ -10,7 +9,6 @@ public class EstoreOptions {
private boolean profileTotalQueryTime;

public EstoreOptions() {
useUnsafe = true;
useDfs = false;
useRecursion = false;
profileParseTreeGenTime = false;
Expand All @@ -23,11 +21,6 @@ public static EstoreOptions getDefaultOptions() {
return new EstoreOptions();
}

public EstoreOptions useUnsafe(boolean flag) {
useUnsafe = flag;
return this;
}

public EstoreOptions useDfs(boolean flag) {
useDfs = flag;
return this;
Expand Down Expand Up @@ -66,10 +59,6 @@ public EstoreOptions profileTotalQueryTime(boolean flag) {
return this;
}

public boolean getUseUnsafe() {
return useUnsafe;
}

public boolean getUseDfs() {
return useDfs;
}
Expand Down
4 changes: 1 addition & 3 deletions estore/src/main/java/org/estore/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,17 @@ public class Main {
public static void main(String[] args) {
boolean exit = false;
int port = 1234;
boolean unsafeFlag = false;
if (args.length > 0) {
try {
port = Integer.parseInt(args[0]);
unsafeFlag = Boolean.parseBoolean(args[1]);
} catch (Exception e) {
System.err.println("Invalid argument");
System.exit(1);
}
}

try (ServerSocket serverSocket = new ServerSocket(port)) {
Estore estore = new Estore("testDb", new EstoreOptions().useUnsafe(unsafeFlag));
Estore estore = new Estore("testDb");
while (!exit) {
try (Socket clientSocket = serverSocket.accept();
BufferedReader in =
Expand Down
9 changes: 2 additions & 7 deletions estore/src/main/java/org/estore/planner/util/ClassInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import sun.misc.Unsafe;

public abstract class ClassInfo {
protected HashMap<String, String> referenceFieldTypeMap;
Expand All @@ -14,15 +13,11 @@ public abstract class ClassInfo {
protected HashMap<String, String> primitiveFieldTypeMap;
public Class classInstance;

public static ClassInfo getClassInfo(boolean useUnsafe, Unsafe unsafe, Class classInstance) {
public static ClassInfo getClassInfo(Class classInstance) {
if (classInstance.isArray()) {
return new ArrayClassInfoReflectionImpl(classInstance);
}
if (useUnsafe) {
return new ClassInfoUnsafeImpl(unsafe, classInstance);
} else {
return new ClassInfoReflectionImpl(classInstance);
}
return new ClassInfoReflectionImpl(classInstance);
}

public abstract void addPrimitiveField(Field field);
Expand Down
Loading
Loading