Как использовать функцию return() ScalikeJDBC с предложением where

Я пытаюсь использовать RETURNING Postgres с ScalikeJDBC (см. scalikejdbc/issues/559)

Как это должно работать с предложением where. returning(...) является членом UpdateSQLBuilder, тогда как where возвращает ConditionSQLBuilder

update(Post)
   .set(sqls"${p.views}=${p.views}+${newViews}")
   .where.eq(p.id,id)
   .returning(p.id,p.lastUpdated, p.views) // does not work as it is not a member of ConditionSQLBuilder

person jen    schedule 02.03.2018    source источник


Ответы (1)


Как вы сказали, returning не является членом ConditionSQLBuilder. Однако вы можете использовать метод append после предложения where, поскольку он определен в ConditionSQLBuilder:

update(Post)
   .set(sqls"${p.views} = ${p.views} + ${newViews}")
   .where.eq(p.id, id)
   .append(sqls"returning ${p.id}, ${p.lastUpdated}, ${p.views}"

И, если вы сопоставите возвращаемые столбцы с объектом с помощью вашего компоновщика следующим образом:

val postOpt = withSQL(builder).map(Post(p)).single().apply()

Затем вы должны использовать ${p.result.columnName} вместо ${p.columnName} в вашем SQLSyntax, который вы передали методу append в качестве параметра. Чтобы сопоставить все столбцы, просто используйте ${p.result.*}.

person Mert Elifoğlu    schedule 26.03.2020