@Override public String toString() { return "ObjectNode [shardName=" + shardName + ", objectName=" + getCompositeObjectName() + "]"; }
public void cloneMetadataNode(ObjectNode node) { if (StringUtils.isNullOrEmpty(node.getShardName())) { throw new IllegalArgumentException(); } this.metadataNode = new ObjectNode(node.getShardName(), node.getCatalog(), node.getSchema(), this.getName(), node.getSuffix()); }
public void setObjectNodes(ObjectNode... objectNode) { for (ObjectNode item : objectNode) { if (StringUtils.isNullOrEmpty(item.getShardName())) { throw new IllegalArgumentException("The shardName attribute of ObjectNode is required."); } if (StringUtils.isNullOrEmpty(item.getObjectName())) { item.setObjectName(getName()); } } this.objectNodes = objectNode; }
private void validateTableNode(TableRule object, ObjectNode... nodes) { for (ObjectNode objectNode : nodes) { String shardName = objectNode.getShardName(); boolean matched = false; for (Shard shard : configuration.cluster) { if (StringUtils.equals(shardName, shard.getName())) { matched = true; break; } } if (!matched) { throw new IllegalArgumentException( "table " + object.getName() + " has invalid node " + objectNode.toString()); } } }
try { Connection conn = null; String shardName = matadataNode.getShardName(); String tableName = matadataNode.getQualifiedObjectName(); String catalog = matadataNode.getCatalog(); String schema = matadataNode.getSchema(); try { JdbcRepository dsRepository = (JdbcRepository) database.getRepository();
public void loadMataData(Session session) { ObjectNode node = tableRule.getMetadataNode(); String tableName = node.getCompositeObjectName(); String shardName = node.getShardName(); try { trace.debug("Try to load {0} metadata from table {1}.{2}", getName(), shardName, tableName); readMataData(session, node); trace.debug("Load the {0} metadata success.", getName()); initException = null; } catch (DbException e) { if(e.getErrorCode() == ErrorCode.COLUMN_NOT_FOUND_1) { throw e; } trace.debug("Fail to load {0} metadata from table {1}.{2}. error: {3}", getName(), shardName, tableName, e.getCause().getMessage()); initException = e; Column[] cols = {}; setColumns(cols); } if (isInited()) { setRuleColumns(); } }
public boolean isNodeComparable(TableRule o) { if(o.getClass() == TableRule.class) { return metadataNode.getShardName().equals(o.metadataNode.getShardName()); } return false; }
private void createTableIfNotExits() { String tableName = tableNode.getQualifiedObjectName(); String catalog = tableNode.getCatalog(); String schema = tableNode.getSchema(); Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = dataSource.getConnection(); DatabaseMetaData meta = conn.getMetaData(); rs = meta.getTables(catalog, schema, tableName, null); if (!rs.next()) { stmt = conn.createStatement(); stmt.execute(buildCreateQuery()); } } catch (SQLException e) { throw DbException.convert(e); } finally { JdbcUtils.closeSilently(rs); JdbcUtils.closeSilently(stmt); JdbcUtils.closeSilently(conn); } }
ObjectNode[] objectNodes = shardTable.getObjectNodes(); for (ObjectNode objectNode : objectNodes) { if (StringUtils.equals(target.getShardName(), objectNode.getShardName()) && StringUtils.equals(target.getSuffix(), objectNode.getSuffix())) { return objectNode; + " not have the consistency TableNode for node " + target.toString()); case TableRule.GLOBAL_NODE_TABLE: GlobalTableRule globalTable = (GlobalTableRule) tableRule; objectNodes = globalTable.getBroadcasts(); for (ObjectNode objectNode : objectNodes) { if (StringUtils.equals(target.getShardName(), objectNode.getShardName())) { return objectNode; + " not have the TableNode on shard " + target.getShardName()); case TableRule.FIXED_NODE_TABLE: ObjectNode objectNode = tableRule.getMetadataNode(); if (StringUtils.equals(target.getShardName(), objectNode.getShardName())) { return objectNode; "The table " + tableRule.getName() + " not have the TableNode on shard " + target.getShardName()); default: throw DbException.throwInternalError();
List<String> suffixes = New.arrayList(); for (ObjectNode tableNode : selected) { String nodeName = tableNode.getShardName(); String tableName = tableNode.getObjectName(); String suffix = tableNode.getSuffix(); if (shardName.equals(nodeName)) { tables.add(tableName);
private void validateGroupNodeItem(GroupObjectNode node) { Set<String> catalog = New.hashSet(); Set<String> schema = New.hashSet(); for (ObjectNode objectNode : node.getItems()) { catalog.add(objectNode.getCatalog()); schema.add(objectNode.getSchema()); } if (catalog.size() > 1) { throw new IllegalStateException("Inconsistent object node catalog " + catalog); } if (schema.size() > 1) { throw new IllegalStateException("Inconsistent object node schema " + schema); } node.setCatalog(catalog.iterator().next()); node.setSchema(schema.iterator().next()); }
private GlobalTableRule parseGlobalTableRule(XNode tableNode) { String tableName = tableNode.getStringAttribute("name"); GlobalTableRule globalTableRule = new GlobalTableRule(tableName, null); String metaNodeIndex = tableNode.getStringAttribute("metaNodeIndex"); List<XNode> evalNodes = tableNode.evalNodes("broadcast/node"); if(evalNodes.isEmpty()) { XNode broadcast = tableNode.evalNode("broadcast"); String text = getStringBody(broadcast); text = text.replaceAll("\\s", ""); if (!StringUtils.isNullOrEmpty(text)) { List<String> asList = Arrays.asList(StringUtils.arraySplit(text, ',', true)); HashSet<String> shards = new HashSet<String>(asList); List<ObjectNode> objectNodes = New.arrayList(shards.size()); for (String shard : shards) { objectNodes.add(new ObjectNode(shard, tableName)); } globalTableRule.setBroadcasts(objectNodes.toArray(new ObjectNode[objectNodes.size()])); } } else { parseNodes(globalTableRule, evalNodes); } // alter object node init. setMetaNodeIndex(globalTableRule, metaNodeIndex); return globalTableRule; }
tableRule.getMetadataNode().getShardName(), tableRule.getMetadataNode().getCompositeObjectName(), i.getShardName(), i.getCompositeObjectName(), i.getShardName(), i.getCompositeObjectName(),
private Set<String> shardNames() { Set<String> shards = New.linkedHashSet(); for (ObjectNode tableNode : selected) { String shardName = tableNode.getShardName(); shards.add(shardName); } return shards; }
if (suffixes.isEmpty()) { for (String shardItem : shards) { ObjectNode node = new ObjectNode(shardItem, catalog, schema, name, null); if (tableNodes.contains(node)) { throw new ParsingException("Duplicate " + node + " defined in " + table.getName() + "'s nodes"); for (String shardItem : shards) { for (String suffixItem : suffixes) { ObjectNode node = new ObjectNode(shardItem, catalog, schema, name, suffixItem); if (tableNodes.contains(node)) { throw new ParsingException(
public void cloneObjectNodes(ObjectNode... objectNode) { this.objectNodes = new ObjectNode[objectNode.length]; for (int i = 0; i < objectNode.length; i++) { ObjectNode item = objectNode[i]; if (StringUtils.isNullOrEmpty(item.getShardName())) { throw new IllegalArgumentException("The shardName attribute of ObjectNode is required."); } this.objectNodes[i] = new ObjectNode(item.getShardName(), item.getCatalog(), item.getSchema(), this.getName(), item.getSuffix()); } }
protected String buildUpdateQuery() { StringBuilder sql = new StringBuilder(); sql.append("UPDATE ").append(tableNode.getCompositeObjectName()).append(" SET ").append(valueColumnName) .append(" = ?").append(" WHERE ").append(valueColumnName).append(" = ? and ").append(nameColumnName) .append(" = ?"); return sql.toString(); }
@Override public UpdateWorker createUpdateWorker(AlterTableAddConstraint prepared, ObjectNode node, ObjectNode refNode) { SQLTranslated translated = repo.getSQLTranslator().translate(prepared, node, refNode); JdbcUpdateWorker handler = new JdbcUpdateWorker(prepared.getSession(), node.getShardName(), translated.sql, translated.params); return handler; }
public void configure(Properties params) { JdbcRepository repo = (JdbcRepository) database.getRepository(); String shardName = params.getProperty("shard", repo.getPublicDB()); String catalog = params.getProperty("catalog"); String schema = params.getProperty("schema"); String tableName = params.getProperty("tableName", DEF_TABLE); tableName = database.identifier(tableName); if (catalog != null) { catalog = database.identifier(catalog); } if (schema != null) { schema = database.identifier(schema); } tableNode = new ObjectNode(shardName, catalog, schema, tableName, null); nameValue = StringUtils.toLowerEnglish(getName()); nameColumnName = params.getProperty("nameColumnName", DEF_NAME_COLUMN); valueColumnName = params.getProperty("valueColumnName", DEF_VALUE_COLUMN); nameColumnLength = getIntProperty(params, "nameColumnLength", DEF_NAMECOLUMNLENGTH_LENGTH); incrementSize = getIntProperty(params, "cacheSize", (int) getCacheSize()); initialValue = getIntProperty(params, "initialValue", DEFAULT_INITIAL_VALUE); this.selectQuery = buildSelectQuery(); this.updateQuery = buildUpdateQuery(); this.insertQuery = buildInsertQuery(); this.dataSource = repo.getDataSourceByShardName(shardName); this.optimizer = new HiloOptimizer(incrementSize); this.createTableIfNotExits(); }
@Override protected void doPrepare() { String indexName = prepared.getIndexName(); String tableName = prepared.getTableName(); TableMate table = getTableMate(tableName); RoutingResult rr = routingHandler.doRoute(table); ObjectNode[] selectNodes = rr.getSelectNodes(); workers = New.arrayList(selectNodes.length); for (ObjectNode tableNode : selectNodes) { ObjectNode indexNode = new ObjectNode(tableNode.getShardName(), tableNode.getCatalog(), tableNode.getSchema(), indexName, tableNode.getSuffix()); UpdateWorker worker = queryHandlerFactory.createUpdateWorker(prepared, indexNode, tableNode); workers.add(worker); } }