// TM @Override protected void batchDeleteRow(String cf, List<Node[]> li, String keyspace) { if (cf.equals(CF_C_SPO)) { super.batchDeleteRow(cf, li, keyspace); } else if (cf.equals(CF_PO_S)) { Mutator<byte[]> m = HFactory.createMutator(getExistingKeyspace(keyspace), _bs); for (Node[] nx : li) { // reorder for the key Node[] reordered = Util.reorder(nx, _maps.get(cf)); ByteBuffer rowKey = createKey(new Node[] {reordered[0], reordered[1]}); String colKey = reordered[2].toN3(); // delete the full row m.addDeletion(rowKey.array(), cf); } m.execute(); } else { Mutator<String> m = HFactory.createMutator(getExistingKeyspace(keyspace), _ss); for (Node[] nx : li) { // reorder for the key Node[] reordered = Util.reorder(nx, _maps.get(cf)); String rowKey = reordered[0].toN3(); m.addDeletion(rowKey, cf); _log.info("Delete full row for " + rowKey + " cf= " + cf); } m.execute(); } }
@Override protected void batchInsert(String cf, List<Node[]> li, String keyspace) { if (cf.equals(CF_C_SPO)) { super.batchInsert(cf, li, keyspace); } else if (cf.equals(CF_PO_S)) { Mutator<byte[]> m = HFactory.createMutator(getExistingKeyspace(keyspace), _bs); for (Node[] nx : li) { // reorder for the key Node[] reordered = Util.reorder(nx, _maps.get(cf)); ByteBuffer rowKey = createKey(new Node[] {reordered[0], reordered[1]}); String colKey = reordered[2].toN3(); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn(colKey, "")); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn("!p", reordered[0].toN3())); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn("!o", reordered[1].toN3())); } m.execute(); } else { Mutator<String> m = HFactory.createMutator(getExistingKeyspace(keyspace), _ss); for (Node[] nx : li) { // reorder for the key Node[] reordered = Util.reorder(nx, _maps.get(cf)); String rowKey = reordered[0].toN3(); // for ERS_bridges_.. keyspaces, use the column value; it is easier for querying afterwards // few keyspacs such as ERS_graphs cannot be decoded String keyspace_decoded = this.decodeKeyspace(keyspace); if (keyspace_decoded != null && keyspace_decoded.startsWith(Listener.BRIDGES_KEYSPACE + "_")) { String colKey = reordered[1].toN3(); m.addInsertion(rowKey, cf, HFactory.createStringColumn(colKey, reordered[2].toN3())); } else { String colKey = Nodes.toN3(new Node[] {reordered[1], reordered[2]}); m.addInsertion(rowKey, cf, HFactory.createStringColumn(colKey, "")); } } m.execute(); } }
// create a batch of different operations and execute them all together @Override protected void batchRun(String cf, List<Node[]> li, String keyspace) { if (cf.equals(CF_C_SPO)) { // this is not implemented, we don't care about CSPO CF super.batchRun(cf, li, keyspace); } else if (cf.equals(CF_PO_S)) { Mutator<byte[]> m = HFactory.createMutator(getExistingKeyspace(keyspace), _bs); for (Node[] nx : li) { Node[] reordered; ByteBuffer rowKey; String colKey; // _log.info("$$$ " + nx[0].toString() + " " + nx[1].toString() + " " + nx[2].toString() // + " " + nx[3].toString()); switch (Integer.parseInt(nx[3].toString())) { case 0: // ignore query continue; case 1: // insertion // reorder for the key reordered = Util.reorder(nx, _maps_br.get(cf)); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn(colKey, "")); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!p", reordered[0].toN3())); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!o", reordered[1].toN3())); break; case 11: // insertion link // reorder for the key reordered = Util.reorder(nx, _maps_br.get(cf)); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn(colKey, "")); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!p", reordered[0].toN3())); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!o", reordered[1].toN3())); // add the back link as well reordered = Util.reorder(nx, _maps_br.get("link")); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn(colKey, "")); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!p", reordered[0].toN3())); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!o", reordered[1].toN3())); break; case 2: // deletion // reorder for the key reordered = Util.reorder(nx, _maps_br.get(cf)); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); // delete the full row m.addDeletion(rowKey.array(), cf); break; case 21: // deletion link // reorder for the key reordered = Util.reorder(nx, _maps_br.get(cf)); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); // delete the full row m.addDeletion(rowKey.array(), cf); // delete the back link as well if (nx[2] instanceof Resource) { reordered = Util.reorder(nx, _maps_br.get("link")); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); // delete the full row containing the back link m.addDeletion(rowKey.array(), cf); } break; case 3: // update, run a delete and an insert // deletion // reorder for the key reordered = Util.reorder(nx, _maps_br_update_d.get(cf)); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); // delete the full row m.addDeletion(rowKey.array(), cf); // insertion // reorder for the key reordered = Util.reorder(nx, _maps_br_update_i.get(cf)); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn(colKey, "")); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!p", reordered[0].toN3())); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!o", reordered[1].toN3())); break; case 4: // delete the full entity Node[] query = new Node[3]; query[0] = nx[0]; query[1] = new Variable("p"); query[2] = new Variable("o"); try { Iterator<Node[]> it = this.query(query, Integer.MAX_VALUE, keyspace); // if data, delete :) for (; it.hasNext(); ) { Node[] n = (Node[]) it.next(); // this.deleteData(n, keyspace, 0); rowKey = createKey(new Node[] {n[0], n[1]}); m.addDeletion(rowKey.array(), cf); } } catch (StoreException ex) { _log.severe(ex.getMessage()); } break; case 31: // update with link, run a delete and an insert // deletion // reorder for the key reordered = Util.reorder(nx, _maps_br_update_d.get(cf)); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); // delete the full row m.addDeletion(rowKey.array(), cf); // delete the back link as well if (nx[2] instanceof Resource) { reordered = Util.reorder(nx, _maps_br_update_d.get("link")); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); // delete the full row containing the back link m.addDeletion(rowKey.array(), cf); } // insertion // reorder for the key reordered = Util.reorder(nx, _maps_br_update_i.get(cf)); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn(colKey, "")); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!p", reordered[0].toN3())); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!o", reordered[1].toN3())); // insert also the new back link if (nx[5] instanceof Resource) { reordered = Util.reorder(nx, _maps_br_update_i.get("link")); rowKey = createKey(new Node[] {reordered[0], reordered[1]}); colKey = reordered[2].toN3(); m.addInsertion(rowKey.array(), cf, HFactory.createStringColumn(colKey, "")); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!p", reordered[0].toN3())); m.addInsertion( rowKey.array(), cf, HFactory.createStringColumn("!o", reordered[1].toN3())); } break; default: _log.info("OPERATION UNKNOWN, moving to next quad"); break; } } m.execute(); } else { Mutator<String> m = HFactory.createMutator(getExistingKeyspace(keyspace), _ss); for (Node[] nx : li) { Node[] reordered; String rowKey; String colKey; // _log.info("$$$ " + nx[0].toString() + " " + nx[1].toString() + " " + nx[2].toString() // + " " + nx[3].toString()); switch (Integer.parseInt(nx[3].toString())) { case 0: // ignore query continue; case 1: // insertion // reorder for the key reordered = Util.reorder(nx, _maps_br.get(cf)); rowKey = reordered[0].toN3(); colKey = Nodes.toN3(new Node[] {reordered[1], reordered[2]}); m.addInsertion(rowKey, cf, HFactory.createStringColumn(colKey, "")); break; case 2: // deletion // reorder for the key reordered = Util.reorder(nx, _maps_br.get(cf)); rowKey = reordered[0].toN3(); colKey = Nodes.toN3(new Node[] {reordered[1], reordered[2]}); m.addDeletion(rowKey, cf, colKey, _ss); break; case 3: // update = delete+insert // reorder for the key reordered = Util.reorder(nx, _maps_br_update_d.get(cf)); rowKey = reordered[0].toN3(); colKey = Nodes.toN3(new Node[] {reordered[1], reordered[2]}); m.addDeletion(rowKey, cf, colKey, _ss); // reorder for the key reordered = Util.reorder(nx, _maps_br_update_i.get(cf)); rowKey = reordered[0].toN3(); colKey = Nodes.toN3(new Node[] {reordered[1], reordered[2]}); m.addInsertion(rowKey, cf, HFactory.createStringColumn(colKey, "")); break; case 4: // delete the full entity Node[] query = new Node[3]; query[0] = nx[0]; query[1] = new Variable("p"); query[2] = new Variable("o"); try { Iterator<Node[]> it = this.query(query, Integer.MAX_VALUE, keyspace); // if data, delete :) for (; it.hasNext(); ) { Node[] n = (Node[]) it.next(); // this.deleteData(n, keyspace, 0); rowKey = n[0].toN3(); m.addDeletion(rowKey, cf); } } catch (StoreException ex) { _log.severe(ex.getMessage()); } break; default: _log.info("OPERATION UNKNOWN, moving to next quad"); break; } } m.execute(); } }