Skip to content

Commit

Permalink
Introduced RQL queries and string-based entity construction.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Feb 28, 2015
1 parent e1df738 commit 904211a
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 15 deletions.
Expand Up @@ -112,6 +112,25 @@ public <E> Class<E> getEntityTypeFor(Class<E> clazz) {
return clazz;
}

@Override
public Object entity(String data) {
String entityName = U.capitalized(data.split(" ")[0]);
Class<?> entityType = getEntityType(entityName);
U.must(entityType != null, "Cannot find entity '%s'!", entityName);

String[] props = data.substring(entityName.length() + 1).split("\\s*\\,\\s*");
Map<String, Object> properties = U.map();

for (String prop : props) {
String[] kv = prop.trim().split("\\s*=\\s*");
String key = kv[0];
Object value = kv.length > 1 ? kv[1] : true;
properties.put(key, value);
}

return entity(entityType, properties);
}

@Override
public String toString() {
return "DbSchemaImpl [entityTypes=" + entityTypes + ", entityTypesPlural=" + entityTypesPlural + "]";
Expand Down
Expand Up @@ -307,24 +307,30 @@ public void load(byte[] data) {

@Override
public void init(String data, Object... args) {
data = U.format(data, args);

String entityName = U.capitalized(data.split(" ")[0]);
Class<?> entityType = schema().getEntityType(entityName);
U.must(entityType != null, "Cannot find entity '%s'!", entityName);
Object entity = entity(data, args);
inmem.sudo().prefill(entity);
}

String[] props = data.substring(entityName.length() + 1).split("\\s*\\,\\s*");
Map<String, Object> properties = U.map();
@SuppressWarnings("unchecked")
@Override
public <T> T entity(String data, Object... args) {
data = U.format(data, args);
return (T) schema().entity(data);
}

for (String prop : props) {
String[] kv = prop.trim().split("\\s*=\\s*");
String key = kv[0];
Object value = kv.length > 1 ? kv[1] : true;
properties.put(key, value);
@Override
public void rql(String rql, Object... args) {
rql = rql.trim();
int p = rql.indexOf(' ');
U.must(p > 0, "Invalid RQL syntax!");
String cmd = rql.substring(0, p).trim();
String data = rql.substring(p + 1).trim();
U.show(cmd, data, args);
if (cmd.equalsIgnoreCase("INSERT")) {
insert(entity(data, args));
} else {
throw U.rte("Unknown RQL command: '%s'!", cmd);
}

Object entity = schema().entity(entityType, properties);
inmem.sudo().prefill(entity);
}

}
8 changes: 8 additions & 0 deletions rapidoid-db/src/main/java/org/rapidoid/db/DB.java
Expand Up @@ -280,4 +280,12 @@ public static void init(String data, Object... args) {
db().init(data, args);
}

public static void rql(String rql, Object... args) {
db().rql(rql, args);
}

public static <T> T entity(String data, Object... args) {
return db().entity(data, args);
}

}
4 changes: 4 additions & 0 deletions rapidoid-db/src/main/java/org/rapidoid/db/Database.java
Expand Up @@ -116,4 +116,8 @@ public interface Database extends Activity<Database> {

void init(String data, Object... args);

void rql(String rql, Object... args);

<T> T entity(String data, Object... args);

}
2 changes: 2 additions & 0 deletions rapidoid-db/src/main/java/org/rapidoid/db/DbSchema.java
Expand Up @@ -39,4 +39,6 @@ public interface DbSchema {

<E> Class<E> getEntityTypeFor(Class<E> clazz);

Object entity(String data);

}

0 comments on commit 904211a

Please sign in to comment.