Clojure java .jdb c ключ возврата возвращает только одну строку - PullRequest
2 голосов
/ 17 марта 2020

Использование org.clojure / java .jdb c "0.7.11" и PostgreSQL 11.5

Кажется, опция return-keys возвращает только первую строку в виде карты, а не полный список

Пример:

(jdbc/execute!
  db
  "INSERT INTO test_table(letter) VALUES ('A'), ('B');"
  {:return-keys ["letter"]})

=> {:letter "A"}

То, что я надеялся получить, было бы примерно таким: ({:letter "A"} {:letter "B"})

Обе строки вставляются в базу данных без проблем .

Я знаю, что мог бы сделать это, используя вместо этого insert-multi и вернуть строки, но я действительно хочу сделать это обновление, поэтому оно должно быть выполнением, просто подумал, что это было самый простой способ показать проблему.

Кто-нибудь знает, почему я возвращаю только одну строку ключей, и есть ли способ вернуть все строки?

1 Ответ

1 голос
/ 18 марта 2020

Я думаю, что вам, вероятно, понадобится:

(jdbc/execute!
  db
  ["INSERT INTO test_table(letter) VALUES (?)"
   ["A"] ["B"]]
  {:return-keys ["letter"] :multi? true})

Если указать :multi? true, библиотека будет использовать .executeBatch вместо .executeUpdate, и вы должны получить несколько результатов обратно.

Если вы используете next.jdbc вместо этого, у вас не будет этой проблемы:

(next.jdbc/execute!
  db
  ["INSERT INTO test_table(letter) VALUES ('A'), ('B')"]
  {:return-keys ["letter"]})

Это должно вернуть оба вставленных ключа.

Обратите внимание, что clojure.java.jdbc считается "стабильным" что означает, что он больше не получает новую функциональность. На данный момент все текущие и будущие разработки ведутся на next.jdbc (частично из-за проблем, подобных описанным выше). next.jdbc - это версия 1.0, которой clojure.java.jdbc никогда не было.

https://github.com/seancorfield/next-jdbc

...