Параметризованный запрос Couchbase со значениями чисел c - PullRequest
4 голосов
/ 07 февраля 2020

Я пытаюсь добавить числовые значения c к параметризованному AnalyticsQuery, но продолжаю получать ошибки при выполнении запроса. java, создающий запрос, выглядит следующим образом:

  private ParameterizedAnalyticsQuery aggregateQuery(String userId, Long from, Long to) {
    return AnalyticsQuery.parameterized(
        "select d.field1,"
            + " d.field2"
            + " from data d"
            + " where d.userId = $userId"
            + " and d.timestamp between $from and $to",
        JsonObject.create()
            .put("userId", userId)
            .put("from", from)
            .put("to", to)
    );
  }

При выполнении запроса возвращается следующая ошибка:

<< Encountered \"from\" at column 213. ","code":24000}]

Если я изменю запрос на следующий, то он работает и возвращает строки:

    return AnalyticsQuery.parameterized(
        "select d.field1,"
            + " d.field2"
            + " from data d"
            + " where d.userId = $userId"
            + " and d.timestamp between " + from
            + " and " + to,
        JsonObject.create()
            .put("userId", userId)
    );

Почему возникает проблема, когда параметры не являются строками? Есть ли способ использовать параметризованные запросы со значениями чисел c?

1 Ответ

5 голосов
/ 07 февраля 2020

FROM и TO являются зарезервированными ключевыми словами в N1QL для Google Analytics и поэтому должны использоваться в обратных кавычках при использовании в качестве имен параметров:

... and d.timestamp between $`from` and $`to`

Список всех зарезервированных ключевых слов см. В * 1005. *

...