我正在尝试将一个SimpleStatement
转换为CQL。
RegularInsert regularStatement = ...;
Map<String, Object> namedValues = new HashMap<>();
namedValues.put("a", "Hello");
namedValues.put("b", 1);
SimpleStatement statement = regularStatement.build(namedValues);
System.out.println(statement.getQuery());
System.out.println(statement.getNamedValues()); // Map<CqlIdentifier, Object>
返回:
INSERT INTO keyspace.table (a,b) VALUES (?,?)
{a=Hello, b=1}
这没问题,但我还需要最终的CQL查询语句:
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
我首先尝试将命名值绑定到RegularInsert
,这样我就可以使用asCql()
获取CQL原始字符串,然后构建一个SimpleStatement
。但是它并不像我预期的那样工作:
RegularInsert regularStatement = statementInsertWithKeyspace(database.getDatabaseName());
// Transform <String> to literal <Term>
Map<String, Term> literalNamedValues = namedValues.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> literal(e.getValue())));
regularStatement = regularStatement.values(literalNamedValues);
System.out.println(regularStatement.asCql());
SimpleStatement statement = regularStatement.values(literalNamedValues).build();
System.out.println(statement.getQuery());
System.out.println(statement.getNamedValues()); // Map<CqlIdentifier, Object>
返回:
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
INSERT INTO keyspace.table (a,b) VALUES ('Hello',1)
{}
我如何从SimpleStatement
中获取原始的CQL,同时保留CQL模板(不带值)?
谢谢。