Java Code Examples for com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement#getColumns()
The following examples show how to use
com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement#getColumns() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: InsertParser.java From dts with Apache License 2.0 | 5 votes |
@Override public TableDataInfo getPresentValue(List<Object> sqlParamsList, MySqlInsertStatement parseSqlStatement, StatementAdapter statementAdapter, TableMetaInfo tableMetaInfo) throws SQLException { TableDataInfo txcTable = new TableDataInfo(); txcTable.setTableName(parseSqlStatement.getTableName().getSimpleName()); List<TxcLine> line = txcTable.getLine(); List<SQLInsertStatement.ValuesClause> valuesList = parseSqlStatement.getValuesList(); List<SQLExpr> columns = parseSqlStatement.getColumns(); for (SQLInsertStatement.ValuesClause valuesClause : valuesList) { List<SQLExpr> values = valuesClause.getValues(); TxcLine txcLine = new TxcLine(); for (int i = 0; i < columns.size(); i++) { TxcField txcField = new TxcField(); String columnName = SQLUtils.toSQLString(columns.get(i)).replace("\'", "").replace("`", "").trim(); txcField.setName(columnName); if (sqlParamsList != null && !sqlParamsList.isEmpty()) { if (columnName.equalsIgnoreCase(tableMetaInfo.getAutoIncrementPrimaryKey())) { sqlParamsList.add(i, getAutoIncrementPrimaryKeyValue(statementAdapter.getStatement())); } txcField.setValue(sqlParamsList.get(i)); } else { txcField.setValue(SQLUtils.toSQLString(values.get(i))); } txcField.setJdkValue(SerializeUtils.serialize(txcField.getValue())); txcLine.getFields().add(txcField); } line.add(txcLine); } return txcTable; }
Example 2
Source File: ExplainHandler.java From Mycat2 with GNU General Public License v3.0 | 5 votes |
private static boolean isMycatSeq(String stmt, SchemaConfig schema) { if(pattern.matcher(stmt).find()) { return true; } SQLStatementParser parser =new MySqlStatementParser(stmt); MySqlInsertStatement statement = (MySqlInsertStatement) parser.parseStatement(); String tableName= statement.getTableName().getSimpleName(); TableConfig tableConfig= schema.getTables().get(tableName.toUpperCase()); if(tableConfig==null) { return false; } if(tableConfig.isAutoIncrement()) { boolean isHasIdInSql=false; String primaryKey = tableConfig.getPrimaryKey(); List<SQLExpr> columns = statement.getColumns(); for (SQLExpr column : columns) { String columnName = column.toString(); if(primaryKey.equalsIgnoreCase(columnName)) { isHasIdInSql = true; break; } } if(!isHasIdInSql) { return true; } } return false; }
Example 3
Source File: DruidMysqlCreateTableTest.java From Mycat2 with GNU General Public License v3.0 | 5 votes |
private boolean isInsertHasSlot(String sql) { MySqlStatementParser parser = new MySqlStatementParser(sql); MySqlInsertStatement insertStatement= (MySqlInsertStatement)parser.parseStatement(); List<SQLExpr> cc= insertStatement.getColumns(); for (SQLExpr sqlExpr : cc) { SQLIdentifierExpr c= (SQLIdentifierExpr) sqlExpr; if("_slot".equalsIgnoreCase(c.getName()) &&cc.size()==insertStatement.getValues().getValues().size()) return true; } return false; }
Example 4
Source File: DruidMysqlCreateTableTest.java From dble with GNU General Public License v2.0 | 5 votes |
private boolean isInsertHasSlot(String sql) { MySqlStatementParser parser = new MySqlStatementParser(sql); MySqlInsertStatement insertStatement = (MySqlInsertStatement) parser.parseStatement(); List<SQLExpr> cc = insertStatement.getColumns(); for (SQLExpr sqlExpr : cc) { SQLIdentifierExpr c = (SQLIdentifierExpr) sqlExpr; if ("_slot".equalsIgnoreCase(c.getName()) && cc.size() == insertStatement.getValues().getValues().size()) return true; } return false; }
Example 5
Source File: DruidInsertParser.java From Mycat2 with GNU General Public License v3.0 | 4 votes |
/** * 考虑因素:isChildTable、批量、是否分片 */ @Override public void statementParse(SchemaConfig schema, RouteResultset rrs, SQLStatement stmt) throws SQLNonTransientException { MySqlInsertStatement insert = (MySqlInsertStatement)stmt; String tableName = StringUtil.removeBackquote(insert.getTableName().getSimpleName()).toUpperCase(); ctx.addTable(tableName); if(RouterUtil.isNoSharding(schema,tableName)) {//整个schema都不分库或者该表不拆分 RouterUtil.routeForTableMeta(rrs, schema, tableName, rrs.getStatement()); rrs.setFinishedRoute(true); return; } TableConfig tc = schema.getTables().get(tableName); if(tc == null) { String msg = "can't find table define in schema " + tableName + " schema:" + schema.getName(); LOGGER.warn(msg); throw new SQLNonTransientException(msg); } else { //childTable的insert直接在解析过程中完成路由 if (tc.isChildTable()) { parserChildTable(schema, rrs, tableName, insert); return; } String partitionColumn = tc.getPartitionColumn(); if(partitionColumn != null) {//分片表 //拆分表必须给出column list,否则无法寻找分片字段的值 if(insert.getColumns() == null || insert.getColumns().size() == 0) { throw new SQLSyntaxErrorException("partition table, insert must provide ColumnList"); } //批量insert if(isMultiInsert(insert)) { // String msg = "multi insert not provided" ; // LOGGER.warn(msg); // throw new SQLNonTransientException(msg); parserBatchInsert(schema, rrs, partitionColumn, tableName, insert); } else { parserSingleInsert(schema, rrs, partitionColumn, tableName, insert); } } } }
Example 6
Source File: DruidInsertParser.java From dble with GNU General Public License v2.0 | 4 votes |
private String convertInsertSQL(SchemaInfo schemaInfo, MySqlInsertStatement insert, String originSql, TableConfig tc) throws SQLNonTransientException { TableMeta orgTbMeta = ProxyMeta.getInstance().getTmManager().getSyncTableMeta(schemaInfo.getSchema(), schemaInfo.getTable()); if (orgTbMeta == null) return originSql; boolean isAutoIncrement = tc.isAutoIncrement(); StringBuilder sb = new StringBuilder(200); sb.append("insert "); if (insert.isIgnore()) { sb.append("ignore "); } sb.append("into `"); sb.append(schemaInfo.getTable()); sb.append("`"); List<SQLExpr> columns = insert.getColumns(); int autoIncrement = -1; int colSize; // insert without columns :insert into t values(xxx,xxx) if (columns == null || columns.size() <= 0) { if (isAutoIncrement) { autoIncrement = getIncrementKeyIndex(schemaInfo, tc.getIncrementColumn()); } colSize = orgTbMeta.getColumns().size(); } else { genColumnNames(tc, isAutoIncrement, sb, columns); colSize = columns.size(); if (isAutoIncrement) { getIncrementKeyIndex(schemaInfo, tc.getIncrementColumn()); autoIncrement = columns.size(); sb.append(",").append("`").append(tc.getIncrementColumn()).append("`"); colSize++; } sb.append(")"); } sb.append(" values"); String tableKey = StringUtil.getFullName(schemaInfo.getSchema(), schemaInfo.getTable()); List<ValuesClause> vcl = insert.getValuesList(); if (vcl != null && vcl.size() > 1) { // batch insert for (int j = 0; j < vcl.size(); j++) { if (j != vcl.size() - 1) appendValues(tableKey, vcl.get(j).getValues(), sb, autoIncrement, colSize).append(","); else appendValues(tableKey, vcl.get(j).getValues(), sb, autoIncrement, colSize); } } else { List<SQLExpr> values = insert.getValues().getValues(); appendValues(tableKey, values, sb, autoIncrement, colSize); } List<SQLExpr> dku = insert.getDuplicateKeyUpdate(); if (dku != null && dku.size() > 0) { genDuplicate(sb, dku); } return RouterUtil.removeSchema(sb.toString(), schemaInfo.getSchema()); }