korma / Korma

Tasty SQL for Clojure.
http://sqlkorma.com
1.48k stars 222 forks source link

Parameters from sqlfn inside fields alias are not correctly passed to JDBC #399

Open arttuka opened 5 years ago

arttuka commented 5 years ago

Expected behavior:

Parameters are correctly passed and select expression completes successfully when sqlfn is used inside a fields alias within with.

Current behavior:

Executing such an expression throws exception PSQLException No value specified for parameter 1. org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet (SimpleParameterList.java:257)

Steps to reproduce

DB tables:

parent (id serial primary key, name varchar)
child (id serial primary key, parent int references parent(id), name varchar)

Korma entities:

(declare parent child)
(defentity parent
  (pk :id)
  (has-many child {:fk :parent}))
(defentity child
  (pk :id)
  (belongs-to parent {:fk :parent}))

Korma expression to execute:

(select child
  (fields [:name :child_name])
  (with parent
    (fields [(sqlfn :COALESCE :name "orphan") :parent_name])))

Generated SQL from this expression:

SELECT "child"."name" AS "child_name", COALESCE("parent"."name", ?) AS "parent_name" FROM "child" LEFT JOIN "parent" ON "parent"."id" = "child"."parent"

Notably, this works correctly:

(select child
  (fields [:name :child_name]
          [(sqlfn :COALESCE :parent.name "orphan") :parent_name])
  (with parent))

Environment

Clojure 1.9.0 Korma 0.4.3 (org.clojure/java.jdbc 0.6.1) PostgreSQL 10.6