use of herddb.core.AbstractTableManager in project herddb by diennea.
the class JSQLParserPlanner method queryConsistencyCheckStatement.
public Statement queryConsistencyCheckStatement(String defaultTablespace, String query, List<Object> parameters) {
if (query.startsWith(TABLE_CONSISTENCY_COMMAND)) {
query = query.substring(query.substring(0, 21).length());
String tableSpace = defaultTablespace;
String tableName;
if (query.contains(".")) {
String[] tokens = query.split("\\.");
tableSpace = tokens[0].trim().replaceAll("\'", "");
tableName = tokens[1].trim().replaceAll("\'", "");
} else {
tableName = query.trim();
}
TableSpaceManager tableSpaceManager = manager.getTableSpaceManager(tableSpace);
if (tableSpaceManager == null) {
throw new TableSpaceDoesNotExistException(String.format("Tablespace %s does not exist.", tableSpace));
}
AbstractTableManager tableManager = tableSpaceManager.getTableManager(tableName);
if (tableManager == null || tableManager.getCreatedInTransaction() > 0) {
throw new TableDoesNotExistException(String.format("Table %s does not exist.", tableName));
}
return new TableConsistencyCheckStatement(tableName, tableSpace);
} else {
throw new StatementExecutionException(String.format("Incorrect Syntax for tableconsistencycheck"));
}
}
use of herddb.core.AbstractTableManager in project herddb by diennea.
the class JSQLParserPlanner method buildUpdateStatement.
private ExecutionPlan buildUpdateStatement(String defaultTableSpace, Update update, boolean returnValues) throws StatementExecutionException {
net.sf.jsqlparser.schema.Table table = update.getTable();
// no alias for UPDATE!
checkSupported(table.getAlias() == null);
OpSchema tableSchema = getTableSchema(defaultTableSpace, table);
TableSpaceManager tableSpaceManager = manager.getTableSpaceManager(tableSchema.tableSpace);
AbstractTableManager tableManager = tableSpaceManager.getTableManager(tableSchema.name);
Table tableImpl = tableManager.getTable();
checkSupported(update.getSelect() == null);
checkSupported(update.getJoins() == null);
checkSupported(update.getOrderByElements() == null);
checkSupported(update.getReturningExpressionList() == null);
checkSupported(update.getStartJoins() == null || update.getStartJoins().isEmpty());
List<Expression> projects = update.getExpressions();
List<CompiledSQLExpression> expressions = new ArrayList<>(projects.size());
int index = 0;
List<String> updateColumnList = new ArrayList<>(projects.size());
for (net.sf.jsqlparser.schema.Column column : update.getColumns()) {
checkSupported(column.getTable() == null);
String columnName = fixMySqlBackTicks(column.getColumnName().toLowerCase());
checkSupported(!tableImpl.isPrimaryKeyColumn(columnName));
updateColumnList.add(columnName);
CompiledSQLExpression exp = SQLParserExpressionCompiler.compileExpression(projects.get(index), tableSchema);
expressions.add(exp);
index++;
}
RecordFunction function = new SQLRecordFunction(updateColumnList, tableImpl, expressions);
Predicate where = null;
if (update.getWhere() != null) {
CompiledSQLExpression whereExpression = SQLParserExpressionCompiler.compileExpression(update.getWhere(), tableSchema);
if (whereExpression != null) {
SQLRecordPredicate sqlWhere = new SQLRecordPredicate(tableImpl, null, whereExpression);
IndexUtils.discoverIndexOperations(tableSchema.tableSpace, whereExpression, tableImpl, sqlWhere, update, tableSpaceManager);
where = sqlWhere;
}
}
PlannerOp op = new SimpleUpdateOp(new UpdateStatement(tableSchema.tableSpace, tableSchema.name, null, function, where).setReturnValues(returnValues));
return optimizePlan(op);
}
use of herddb.core.AbstractTableManager in project herddb by diennea.
the class JSQLParserPlanner method buildDeleteStatement.
private ExecutionPlan buildDeleteStatement(String defaultTableSpace, Delete delete) throws StatementExecutionException {
net.sf.jsqlparser.schema.Table table = delete.getTable();
// no alias for DELETE!
checkSupported(table.getAlias() == null);
OpSchema tableSchema = getTableSchema(defaultTableSpace, table);
TableSpaceManager tableSpaceManager = manager.getTableSpaceManager(tableSchema.tableSpace);
AbstractTableManager tableManager = tableSpaceManager.getTableManager(tableSchema.name);
Table tableImpl = tableManager.getTable();
checkSupported(delete.getLimit() == null);
checkSupported(delete.getJoins() == null);
checkSupported(delete.getOrderByElements() == null);
checkSupported(delete.getTables() == null || delete.getTables().isEmpty());
Predicate where = null;
if (delete.getWhere() != null) {
CompiledSQLExpression whereExpression = SQLParserExpressionCompiler.compileExpression(delete.getWhere(), tableSchema);
if (whereExpression != null) {
SQLRecordPredicate sqlWhere = new SQLRecordPredicate(tableImpl, null, whereExpression);
IndexUtils.discoverIndexOperations(tableSchema.tableSpace, whereExpression, tableImpl, sqlWhere, delete, tableSpaceManager);
where = sqlWhere;
}
}
PlannerOp op = new SimpleDeleteOp(new DeleteStatement(tableSchema.tableSpace, tableSchema.name, null, where));
return optimizePlan(op);
}
use of herddb.core.AbstractTableManager in project herddb by diennea.
the class JSQLParserPlanner method buildCreateIndexStatement.
private Statement buildCreateIndexStatement(String defaultTableSpace, CreateIndex s) throws StatementExecutionException {
try {
String tableSpace = s.getTable().getSchemaName();
if (tableSpace == null) {
tableSpace = defaultTableSpace;
}
tableSpace = fixMySqlBackTicks(tableSpace);
String tableName = fixMySqlBackTicks(s.getTable().getName().toLowerCase());
String indexName = fixMySqlBackTicks(s.getIndex().getName().toLowerCase());
boolean unique = isUnique(s.getIndex().getType());
String indexType = convertIndexType(s.getIndex().getType());
herddb.model.Index.Builder builder = herddb.model.Index.builder().name(indexName).uuid(UUID.randomUUID().toString()).type(indexType).unique(unique).table(tableName).tablespace(tableSpace);
AbstractTableManager tableDefinition = manager.getTableSpaceManager(tableSpace).getTableManager(tableName);
if (tableDefinition == null) {
throw new TableDoesNotExistException("no such table " + tableName + " in tablespace " + tableSpace);
}
for (String columnName : s.getIndex().getColumnsNames()) {
columnName = fixMySqlBackTicks(columnName.toLowerCase());
Column column = tableDefinition.getTable().getColumn(columnName);
if (column == null) {
throw new StatementExecutionException("no such column " + columnName + " on table " + tableName + " in tablespace " + tableSpace);
}
builder.column(column.name, column.type);
}
CreateIndexStatement statement = new CreateIndexStatement(builder.build());
return statement;
} catch (IllegalArgumentException err) {
throw new StatementExecutionException("bad index definition: " + err.getMessage(), err);
}
}
use of herddb.core.AbstractTableManager in project herddb by diennea.
the class JSQLParserPlanner method getTable.
private Table getTable(String defaultTableSpace, net.sf.jsqlparser.schema.Table table) {
String tableSpace = table.getSchemaName();
if (tableSpace == null) {
tableSpace = defaultTableSpace;
}
tableSpace = fixMySqlBackTicks(tableSpace);
TableSpaceManager tableSpaceManager = getTableSpaceManager(tableSpace);
if (tableSpaceManager == null) {
clearCache();
throw new StatementExecutionException("tablespace " + defaultTableSpace + " is not available");
}
String tableName = fixMySqlBackTicks(table.getName().toLowerCase());
AbstractTableManager tableManager = tableSpaceManager.getTableManager(tableName);
if (tableManager == null) {
throw new TableDoesNotExistException("no table " + tableName + " here for " + tableSpace);
}
return tableManager.getTable();
}
Aggregations