Skip to content

Commit a9706f9

Browse files
authored
Merge pull request #42 from Functor10/master
Add qsql 0.6 related features.
2 parents a257be1 + 57425d1 commit a9706f9

File tree

110 files changed

+2617
-1278
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

110 files changed

+2617
-1278
lines changed

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,8 @@ nbbuild/
2323
nbdist/
2424
.nb-gradle/
2525

26-
/log/
26+
### Sqlite ###
27+
*-journal
28+
29+
/log/
30+

analysis/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ limitations under the License.
2222
<parent>
2323
<groupId>com.qihoo.qsql</groupId>
2424
<artifactId>qsql</artifactId>
25-
<version>0.5</version>
25+
<version>0.6</version>
2626
</parent>
2727

2828
<artifactId>qsql-calcite-analysis</artifactId>

analysis/src/main/codegen/config.fmpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ data: {
7070
statementParserMethods: [
7171
"SqlShowTables()",
7272
"SqlShowSchemas()",
73-
"SqlUseSchema()"
73+
"SqlUseSchema()",
74+
"SqlInsertOutput()"
7475
]
7576

7677
# List of methods for parsing custom literals.

analysis/src/main/codegen/includes/parserImpls.ftl

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,42 @@ SqlNode SqlUseSchema():
9595
}
9696
}
9797

98+
SqlNode SqlInsertOutput():
99+
{
100+
SqlParserPos pos;
101+
SqlNode position;
102+
SqlNodeList extendList = null;
103+
SqlNodeList columnList = null;
104+
SqlIdentifier dataSource;
105+
SqlNode select;
106+
}
107+
{
108+
<INSERT> { pos = getPos(); }
109+
<INTO> position = CompoundIdentifier()
110+
[
111+
LOOKAHEAD(5)
112+
[ <EXTEND> ]
113+
extendList = ExtendList() {
114+
position = extend(position, extendList);
115+
}
116+
]
117+
[
118+
LOOKAHEAD(2)
119+
{ final Pair<SqlNodeList, SqlNodeList> p; }
120+
p = ParenthesizedCompoundIdentifierList() {
121+
if (p.right.size() > 0) {
122+
position = extend(position, p.right);
123+
}
124+
if (p.left.size() > 0) {
125+
columnList = p.left;
126+
}
127+
}
128+
]
129+
130+
<IN> dataSource = CompoundIdentifier()
131+
select = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY)
132+
{
133+
return new SqlInsertOutput(pos, position, dataSource, columnList, select);
134+
}
135+
}
136+

analysis/src/main/codegen/templates/Parser.jj

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -968,8 +968,6 @@ SqlNode SqlStmt() :
968968
stmt = SqlExplain()
969969
|
970970
stmt = SqlDescribe()
971-
|
972-
stmt = SqlInsert()
973971
|
974972
stmt = SqlDelete()
975973
|
@@ -984,6 +982,11 @@ SqlNode SqlStmt() :
984982
}
985983
}
986984

985+
/**
986+
* Updated by qsql-team
987+
* | stmt = SqlInsert()
988+
*/
989+
987990
/**
988991
* Parses an SQL statement followed by the end-of-file symbol.
989992
*/
@@ -1102,6 +1105,11 @@ SqlNode SqlExplain() :
11021105
}
11031106
}
11041107

1108+
/**
1109+
* Updated by qsql-team
1110+
* | stmt = SqlInsert()
1111+
*/
1112+
11051113
/** Parses a query (SELECT or VALUES)
11061114
* or DML statement (INSERT, UPDATE, DELETE, MERGE). */
11071115
SqlNode SqlQueryOrDml() :
@@ -1111,8 +1119,6 @@ SqlNode SqlQueryOrDml() :
11111119
{
11121120
(
11131121
stmt = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY)
1114-
|
1115-
stmt = SqlInsert()
11161122
|
11171123
stmt = SqlDelete()
11181124
|

analysis/src/main/java/org/apache/calcite/adapter/mysql/MySQLSchema.java renamed to analysis/src/main/java/org/apache/calcite/adapter/custom/JdbcSchema.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package org.apache.calcite.adapter.mysql;
2-
3-
import org.apache.calcite.schema.impl.AbstractSchema;
4-
5-
//TODO reduce all of default schemas like this which has no field and param
6-
public class MySQLSchema extends AbstractSchema {
7-
public MySQLSchema() {}
8-
}
1+
package org.apache.calcite.adapter.custom;
2+
3+
import org.apache.calcite.schema.impl.AbstractSchema;
4+
5+
//TODO reduce all of default schemas like this which has no field and param
6+
public class JdbcSchema extends AbstractSchema {
7+
public JdbcSchema() {}
8+
}

analysis/src/main/java/org/apache/calcite/adapter/mysql/MySQLSchemaFactory.java renamed to analysis/src/main/java/org/apache/calcite/adapter/custom/JdbcSchemaFactory.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
package org.apache.calcite.adapter.mysql;
2-
3-
import org.apache.calcite.schema.Schema;
4-
import org.apache.calcite.schema.SchemaFactory;
5-
import org.apache.calcite.schema.SchemaPlus;
6-
7-
import java.util.Map;
8-
9-
public class MySQLSchemaFactory implements SchemaFactory {
10-
11-
public static final MySQLSchemaFactory INSTANCE = new MySQLSchemaFactory();
12-
13-
private MySQLSchemaFactory() {}
14-
15-
@Override
16-
public Schema create(SchemaPlus parentSchema, String name, Map<String, Object> operand) {
17-
return new MySQLSchema();
18-
}
19-
}
1+
package org.apache.calcite.adapter.custom;
2+
3+
import org.apache.calcite.schema.Schema;
4+
import org.apache.calcite.schema.SchemaFactory;
5+
import org.apache.calcite.schema.SchemaPlus;
6+
7+
import java.util.Map;
8+
9+
public class JdbcSchemaFactory implements SchemaFactory {
10+
11+
public static final JdbcSchemaFactory INSTANCE = new JdbcSchemaFactory();
12+
13+
private JdbcSchemaFactory() {}
14+
15+
@Override
16+
public Schema create(SchemaPlus parentSchema, String name, Map<String, Object> operand) {
17+
return new JdbcSchema();
18+
}
19+
}

analysis/src/main/java/org/apache/calcite/adapter/mysql/MySQLTable.java renamed to analysis/src/main/java/org/apache/calcite/adapter/custom/JdbcTable.java

Lines changed: 67 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,67 @@
1-
package org.apache.calcite.adapter.mysql;
2-
3-
import org.apache.calcite.plan.RelOptCluster;
4-
import org.apache.calcite.plan.RelOptTable;
5-
import org.apache.calcite.rel.RelNode;
6-
import org.apache.calcite.rel.type.RelDataType;
7-
import org.apache.calcite.rel.type.RelDataTypeFactory;
8-
import org.apache.calcite.schema.TranslatableTable;
9-
import org.apache.calcite.schema.impl.AbstractTable;
10-
11-
import java.util.Properties;
12-
13-
public class MySQLTable extends AbstractTable implements TranslatableTable {
14-
public final String jdbcDriver;
15-
public final String jdbcUrl;
16-
public final String jdbcUser;
17-
public final String jdbcPassword;
18-
public final String tableName;
19-
public final String modelUri;
20-
public final String dbName;
21-
22-
public Properties properties;
23-
24-
public Properties getProperties() {
25-
return properties;
26-
}
27-
28-
MySQLTable(String tableName, String dbName,
29-
String driver, String url, String user,
30-
String password, String modelUri) {
31-
this.modelUri = modelUri;
32-
this.jdbcDriver = driver;
33-
this.jdbcUrl = url;
34-
this.jdbcUser = user;
35-
this.jdbcPassword = password;
36-
this.tableName = tableName;
37-
this.dbName = dbName;
38-
39-
this.properties = new Properties();
40-
properties.put("jdbcDriver", driver);
41-
properties.put("jdbcUrl", url);
42-
properties.put("jdbcUser", user);
43-
properties.put("jdbcPassword", password);
44-
properties.put("tableName", tableName);
45-
properties.put("dbName", dbName);
46-
}
47-
48-
@Override
49-
public RelNode toRel(RelOptTable.ToRelContext context, RelOptTable relOptTable) {
50-
final RelOptCluster cluster = context.getCluster();
51-
return new MySQLTableScan(cluster, cluster.traitSet(), relOptTable);
52-
}
53-
54-
@Override
55-
public String getBaseName() {
56-
return dbName;
57-
}
58-
59-
@Override
60-
public RelDataType getRowType(RelDataTypeFactory typeFactory) {
61-
return super.getRowType(modelUri, dbName, tableName, typeFactory);
62-
}
63-
}
1+
package org.apache.calcite.adapter.custom;
2+
3+
import org.apache.calcite.plan.RelOptCluster;
4+
import org.apache.calcite.plan.RelOptTable;
5+
import org.apache.calcite.rel.RelNode;
6+
import org.apache.calcite.rel.type.RelDataType;
7+
import org.apache.calcite.rel.type.RelDataTypeFactory;
8+
import org.apache.calcite.schema.TranslatableTable;
9+
import org.apache.calcite.schema.impl.AbstractTable;
10+
11+
import java.util.Properties;
12+
13+
public class JdbcTable extends AbstractTable implements TranslatableTable {
14+
public final String jdbcDriver;
15+
public final String jdbcUrl;
16+
public final String jdbcUser;
17+
public final String jdbcPassword;
18+
public final String tableName;
19+
public final String modelUri;
20+
public final String dbName;
21+
public final String dbType;
22+
23+
24+
public Properties properties;
25+
26+
public Properties getProperties() {
27+
return properties;
28+
}
29+
30+
JdbcTable(String tableName, String dbName,
31+
String driver, String url, String user,
32+
String password, String modelUri, String dbType) {
33+
this.modelUri = modelUri;
34+
this.jdbcDriver = driver;
35+
this.jdbcUrl = url;
36+
this.jdbcUser = user;
37+
this.jdbcPassword = password;
38+
this.tableName = tableName;
39+
this.dbName = dbName;
40+
this.dbType = dbType;
41+
42+
this.properties = new Properties();
43+
properties.put("jdbcDriver", driver);
44+
properties.put("jdbcUrl", url);
45+
properties.put("jdbcUser", user);
46+
properties.put("jdbcPassword", password);
47+
properties.put("tableName", tableName);
48+
properties.put("dbName", dbName);
49+
properties.put("dbType", dbType);
50+
}
51+
52+
@Override
53+
public RelNode toRel(RelOptTable.ToRelContext context, RelOptTable relOptTable) {
54+
final RelOptCluster cluster = context.getCluster();
55+
return new JdbcTableScan(cluster, cluster.traitSet(), relOptTable);
56+
}
57+
58+
@Override
59+
public String getBaseName() {
60+
return dbName;
61+
}
62+
63+
@Override
64+
public RelDataType getRowType(RelDataTypeFactory typeFactory) {
65+
return super.getRowType(modelUri, dbName, tableName, typeFactory);
66+
}
67+
}

analysis/src/main/java/org/apache/calcite/adapter/mysql/MySQLTableFactory.java renamed to analysis/src/main/java/org/apache/calcite/adapter/custom/JdbcTableFactory.java

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
1-
package org.apache.calcite.adapter.mysql;
2-
3-
import org.apache.calcite.rel.type.RelDataType;
4-
import org.apache.calcite.schema.SchemaPlus;
5-
import org.apache.calcite.schema.Table;
6-
import org.apache.calcite.schema.TableFactory;
7-
8-
import java.util.Map;
9-
10-
public class MySQLTableFactory implements TableFactory {
11-
12-
@Override
13-
public Table create(SchemaPlus schema, String name, Map operand, RelDataType rowType) {
14-
String tableName = operand.get("tableName").toString();
15-
String dbName = operand.get("dbName").toString();
16-
String jdbcUrl = operand.get("jdbcUrl").toString();
17-
String jdbcUser = operand.get("jdbcUser").toString();
18-
String jdbcPassword = operand.get("jdbcPassword").toString();
19-
String jdbcDriver = operand.get("jdbcDriver").toString();
20-
String modelUri = operand.get("modelUri").toString();
21-
22-
return new MySQLTable(tableName, dbName,
23-
jdbcDriver, jdbcUrl,
24-
jdbcUser, jdbcPassword,
25-
modelUri);
26-
}
1+
package org.apache.calcite.adapter.custom;
2+
3+
import org.apache.calcite.rel.type.RelDataType;
4+
import org.apache.calcite.schema.SchemaPlus;
5+
import org.apache.calcite.schema.Table;
6+
import org.apache.calcite.schema.TableFactory;
7+
8+
import java.util.Map;
9+
10+
public class JdbcTableFactory implements TableFactory {
11+
12+
@Override
13+
public Table create(SchemaPlus schema, String name, Map operand, RelDataType rowType) {
14+
String tableName = operand.get("tableName").toString();
15+
String dbName = operand.get("dbName").toString();
16+
String jdbcUrl = operand.get("jdbcUrl").toString();
17+
String jdbcUser = operand.get("jdbcUser").toString();
18+
String jdbcPassword = operand.get("jdbcPassword").toString();
19+
String jdbcDriver = operand.get("jdbcDriver").toString();
20+
String modelUri = operand.get("modelUri").toString();
21+
String dbType = operand.get("dbType").toString();
22+
23+
return new JdbcTable(tableName, dbName,
24+
jdbcDriver, jdbcUrl,
25+
jdbcUser, jdbcPassword,
26+
modelUri, dbType);
27+
}
2728
}

analysis/src/main/java/org/apache/calcite/adapter/mysql/MySQLTableScan.java renamed to analysis/src/main/java/org/apache/calcite/adapter/custom/JdbcTableScan.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
package org.apache.calcite.adapter.mysql;
2-
3-
import org.apache.calcite.plan.RelOptCluster;
4-
import org.apache.calcite.plan.RelOptTable;
5-
import org.apache.calcite.plan.RelTraitSet;
6-
import org.apache.calcite.rel.core.TableScan;
7-
8-
public class MySQLTableScan extends TableScan {
9-
10-
protected MySQLTableScan(RelOptCluster cluster, RelTraitSet traitSet, RelOptTable table) {
11-
super(cluster, traitSet, table);
12-
}
13-
}
1+
package org.apache.calcite.adapter.custom;
2+
3+
import org.apache.calcite.plan.RelOptCluster;
4+
import org.apache.calcite.plan.RelOptTable;
5+
import org.apache.calcite.plan.RelTraitSet;
6+
import org.apache.calcite.rel.core.TableScan;
7+
8+
public class JdbcTableScan extends TableScan {
9+
10+
protected JdbcTableScan(RelOptCluster cluster, RelTraitSet traitSet, RelOptTable table) {
11+
super(cluster, traitSet, table);
12+
}
13+
}

0 commit comments

Comments
 (0)