use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.
the class Updater method deleteRow.
private boolean deleteRow(String dbName, String tableName, Map<Field, Object[]> fieldMap) {
DeleteSelection deleteSelection = QueryBuilder.deleteFrom(dbName, tableName);
Delete delete = null;
int count = 0;
for (Map.Entry<Field, Object[]> entry : fieldMap.entrySet()) {
count++;
String fieldName = entry.getKey().getName();
FieldType fieldType = entry.getKey().getType();
Object fieldValue = entry.getValue()[1];
if (count == 1) {
delete = deleteSelection.whereColumn(fieldName).isEqualTo(buildTerm(fieldType, fieldValue));
} else {
delete = delete.whereColumn(fieldName).isEqualTo(buildTerm(fieldType, fieldValue));
}
}
boolean finishDelete = false;
SimpleStatement stmt = delete.build();
try {
while (!cqlSession.isClosed() && !finishDelete) {
ResultSet result = cqlSession.execute(stmt);
if (result.wasApplied()) {
log.info("delete from table success, executed query {}", delete);
return true;
}
finishDelete = true;
}
} catch (Exception e) {
log.error("delete from table error,{}", e);
}
return false;
}
use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.
the class Updater method updateRow.
/**
* Since we have no way of getting the id of a record, and we cannot get the primary key list of a table,
* even we can it is not extensible. So we the result sql sentense would be like
* UPDATE dbName.tableName SET afterUpdateValues WHERE beforeUpdateValues.
*/
private Boolean updateRow(String dbName, String tableName, Map<Field, Object[]> fieldMap) {
log.info("Updater.updateRow() get called ");
int count = 0;
InsertInto insert = QueryBuilder.insertInto(dbName, tableName);
RegularInsert regularInsert = null;
for (Map.Entry<Field, Object[]> entry : fieldMap.entrySet()) {
count++;
String fieldName = entry.getKey().getName();
FieldType fieldType = entry.getKey().getType();
Object fieldValue = entry.getValue()[1];
if (count == 1) {
regularInsert = insert.value(fieldName, buildTerm(fieldType, fieldValue));
} else {
regularInsert = regularInsert.value(fieldName, buildTerm(fieldType, fieldValue));
}
}
SimpleStatement stmt;
boolean finishUpdate = false;
log.info("trying to execute sql query,{}", regularInsert.asCql());
try {
while (!cqlSession.isClosed() && !finishUpdate) {
stmt = regularInsert.build();
ResultSet result = cqlSession.execute(stmt);
if (result.wasApplied()) {
log.info("update table success, executed cql query {}", regularInsert.asCql());
return true;
}
finishUpdate = true;
}
} catch (Exception e) {
log.error("update table error,{}", e);
}
return false;
}
use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.
the class CassandraSourceTask method poll.
@Override
public Collection<SourceDataEntry> poll() {
List<SourceDataEntry> res = new ArrayList<>();
try {
if (tableQueue.size() > 1)
querier = tableQueue.poll(1000, TimeUnit.MILLISECONDS);
else
querier = tableQueue.peek();
Timer timer = new Timer();
try {
Thread.currentThread();
// 毫秒
Thread.sleep(1000);
} catch (Exception e) {
throw e;
}
querier.poll();
for (Table dataRow : querier.getList()) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("nextQuery", "database");
jsonObject.put("nextPosition", "table");
Schema schema = new Schema();
schema.setDataSource(dataRow.getDatabase());
schema.setName(dataRow.getName());
schema.setFields(new ArrayList<>());
for (int i = 0; i < dataRow.getColList().size(); i++) {
String columnName = dataRow.getColList().get(i);
String rawDataType = dataRow.getRawDataTypeList().get(i);
Field field = new Field(i, columnName, ColumnParser.mapConnectorFieldType(rawDataType));
schema.getFields().add(field);
}
DataEntryBuilder dataEntryBuilder = new DataEntryBuilder(schema);
dataEntryBuilder.timestamp(System.currentTimeMillis()).queue(dataRow.getName()).entryType(EntryType.UPDATE);
for (int i = 0; i < dataRow.getColList().size(); i++) {
Object[] value = new Object[2];
value[0] = value[1] = dataRow.getParserList().get(i).getValue(dataRow.getDataList().get(i));
dataEntryBuilder.putFiled(dataRow.getColList().get(i), JSONObject.toJSONString(value));
}
SourceDataEntry sourceDataEntry = dataEntryBuilder.buildSourceDataEntry(ByteBuffer.wrap((ConstDefine.PREFIX + config.getDbUrl() + config.getDbPort()).getBytes(StandardCharsets.UTF_8)), ByteBuffer.wrap(jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8)));
res.add(sourceDataEntry);
log.debug("sourceDataEntry : {}", JSONObject.toJSONString(sourceDataEntry));
}
} catch (Exception e) {
log.error("Cassandra task poll error, current config:" + JSON.toJSONString(config), e);
}
log.debug("dataEntry poll successfully,{}", JSONObject.toJSONString(res));
return res;
}
use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.
the class MongoDataEntry method createdField.
private static void createdField(Schema schema) {
Field namespace = new Field(0, NAMESPACE, FieldType.STRING);
schema.getFields().add(namespace);
Field operation = new Field(1, Constants.CREATED, FieldType.STRING);
schema.getFields().add(operation);
}
use of io.openmessaging.connector.api.data.Field in project rocketmq-externals by apache.
the class MongoDataEntry method oplogField.
private static void oplogField(Schema schema) {
schema.setFields(new ArrayList<>());
Field op = new Field(0, OPERATION_TYPE, FieldType.STRING);
schema.getFields().add(op);
Field time = new Field(1, TIMESTAMP, FieldType.INT64);
schema.getFields().add(time);
Field v = new Field(2, VERSION, FieldType.INT32);
schema.getFields().add(v);
Field namespace = new Field(3, NAMESPACE, FieldType.STRING);
schema.getFields().add(namespace);
Field patch = new Field(4, PATCH, FieldType.STRING);
schema.getFields().add(patch);
Field objectId = new Field(5, OBJECT_ID, FieldType.STRING);
schema.getFields().add(objectId);
}
Aggregations