После создания объекта запроса, как в этом ответе на переполнение стека или примерах в couchbase java n1ql query docs можем ли мы получить строковый запрос перед отправкой на сервер? Я не хочу отправлять его на сервер. Просто хочу собрать его с DSL, потом получить строку полного запроса с параметрами на месте, что бы ушло на сервер, и обработать его другим способом.
Получить String sql из Couchbase N1qlQuery DSL?
Ответы (1)
Statement
можно преобразовать в строку, просто вызвав toString()
:
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.Statement;
import static com.couchbase.client.java.query.Select.select;
import static com.couchbase.client.java.query.dsl.Expression.i;
import static com.couchbase.client.java.query.dsl.Expression.path;
import static com.couchbase.client.java.query.dsl.Expression.s;
import static com.couchbase.client.java.query.dsl.Expression.x;
Statement statement = select(path(i("travel-sample"), "*"))
.from(i("travel-sample"))
.where(x("name").eq(x("$airline_param"))
.and(x("type").eq(s("airline"))));
System.out.println(statement);
ВЫХОД:
SELECT `travel-sample`.* FROM `travel-sample` WHERE name = $airline_param AND type = "airline"
Как видите, это не приводит к замене параметров. Аргументы отправляются на сервер отдельно от инструкции. Если вы хотите увидеть, что отправляется на сервер, вы можете вызвать N1qlQuery.n1ql()
:
JsonObject args = JsonObject.create().put("$airline_param", "FooFliers");
N1qlQuery q = N1qlQuery.parameterized(statement, args);
JsonObject statementAndArgs = q.n1ql();
System.out.println(statementAndArgs);
ВЫВОД (предварительно):
{
"statement": "SELECT `travel-sample`.* FROM `travel-sample` WHERE name = $airline_param AND type = \"airline\"",
"$airline_param": "FooFliers"
}
Если вам нужно, чтобы аргументы были встроенными, вам нужно будет сделать эту часть самостоятельно, проявляя особую осторожность, чтобы правильно экранировать строковые аргументы.
person
dnault
schedule
06.08.2020
спасибо любезно. Можете ли вы дать мне импорт для этого? Если он где-то сохранен... Я работаю над частью заявления, но не смог получить его из функций?
- person tgkprog; 07.08.2020
вопрос (или предложение, если его еще нет) " title="couchbase n1qlquery dsl пустое, но умное выражение для инициализации с помощью when"> stackoverflow.com/questions/63319538/
- person tgkprog; 10.08.2020