スリック2.1を超えるSQL文字列補間22以上のパラメータ -- scala フィールド と slick フィールド と slick-2.0 フィールド 関連 問題

Sql string interpolation with slick 2.1 with more than 22 parameters












0
vote

問題

日本語

SQL要求を生成するためのSlickで文字列補間を使用しています。

スリック文字列補間は22個未満のパラメータがあるとうまく機能しています。

例:

<事前> <コード> val s = sql"select * from my_table where my_table.id = $i"

しかしスリックがタプルとオートトップリングを使用しているので、私は23以上のパラメータを持つクエリを書き込めません。

例:

<事前> <コード> val s = sql"""select * from my_table where a1 = $i1 and a2 = $i2 and .... and a23 = $i23"""

現時点では、23を超えるパラメータを持つ各クエリの新しいカスタム文字列補間を作成することがわかった唯一の解決策。

例:

<事前> <コード> case class A(q1: Q1, q2: q2, ..., qn: Qn) implicit class CustomSQLInterpolation(val s: StringContext) extends AnyVal { /** Build a SQLInterpolationResult via string interpolation */ def csql[P](q1: Q1, q2: Q2, ..., qn: Qn) = { val a = A(q1, q2, ..., qn) val setTupleA = new SetTupleParameter[A]( SetQ1, SetQ2, ..., SetQ3) new SQLInterpolationResult[A](s.parts, a, setTupleA) } }

しかし、このアプローチは一般的ではなく、本当に使用するのに便利ではありません。

英語

I'm using string interpolation with slick for generating sql request.

Slick string interpolation is working fine when I have less than 22 parameters.

Example:

val s = sql"select * from my_table where my_table.id = $i" 

But as slick is using tuples and auto-tupling, I cannot write queries with more than 23 parameters.

Example:

val s = sql"""select * from my_table                where a1 = $i1 and a2 = $i2 and .... and a23 = $i23""" 

For the moment the only solution I've found it's to create a new custom string interpolation for each query with more than 23 parameters.

Example:

  case class A(q1: Q1, q2: q2, ..., qn: Qn)    implicit class CustomSQLInterpolation(val s: StringContext) extends AnyVal {     /** Build a SQLInterpolationResult via string interpolation */     def csql[P](q1: Q1, q2: Q2, ..., qn: Qn) = {       val a = A(q1, q2, ..., qn)       val setTupleA = new SetTupleParameter[A](         SetQ1, SetQ2, ..., SetQ3)        new SQLInterpolationResult[A](s.parts, a, setTupleA)     }   } 

But this approach is not generic and not really convenient to use.

</div
        
     
     

回答リスト


関連する質問

4  Slick 2.0を使用した一般的なCRUD操作  ( Generic crud operations using slick 2 0 ) 
Slick 2.0の一般的なCRUD形質を書いています。この特性は a)は、データベースから b)要約と同様に、エンティティの読み取り/更新/削除するための一般的な方法を提供してください。次のこのスリック例(データベースの抽象化)とこの記事(Crud Tra...

0  抽象クラスのスカラスリックのマッピングされた列タイプの作成  ( Creating a mapped column type for an abstract class scala slick ) 
抽象的なケースクラスの MappedCOlumnType を作成しようとしています。 <事前> <コード> sealed abstract class Address(address: String) implicit val addressToString...

0  スリックでNULLを受け入れるように句が好きです  ( Like clause to accept null in slick ) 
<事前> <コード> val query = for { s <- Status if s.code like "%" } yield (s) 上記のクエリは、STATUS.CODEがSQLのようにNULLになるレコードを返しません。 "%"ワイルドカー...

1  coktroachdbコマンドを終了するのを待ちます  ( Wait for cockroachdb command to finish ) 
現在の 99887761 ファイルがあります。 <事前> <コード> DROP VIEW IF EXISTS vw_example; CREATE VIEW vw_example as SELECT a FROM b; フライウェイ移行の一部としてこのコ...

2  joda.datetimeをフィルタの比較  ( Compare joda datetime in filter ) 
列[日時]をフィルタの日付で列にしようとしていますが、それを作業する方法を理解することはできません。 <事前> <コード> homeAsync.load(new AsyncCallback<String>() { public void onFailur...

2  スリック更新をN列に一般化する  ( Generalizing slick update to n columns ) 
スリックテーブル内の列の値を更新するための一般的な方法を作成しました。私のすべてのテーブルは、<コード> id を持つ共通の特性から拡張されているため、このようなものを思い付くのは簡単でした。 <事前> <コード> def update[T](id: Lo...

2  DELETEの一般的なクエリ実行者メソッドを書く方法は?  ( How to write generic query executor method for delete ) 
汎用クエリ実行者メソッドを作成しようとしています。 insert 、<コード> 99887669 、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、 9988766610 。 <?xm...

4  なぜ持ち上げたクエリ内のリストへのマッピングは、「スリックは、与えられた型をマップする方法を知りません。」で失敗するのでしょうか?  ( Why does mapping to a list inside lifted query fail with slick does not know ho ) 
滑らかな持ち上げられたクエリ内で multiplyEm0 にマッピングしようとしています。 <事前> <コード> multiplyEm1 スリック以外のマップ操作では、任意の種類にマッピングできますが、Slickクエリでは、Scala multiplyEm...

0  Slick 2.1.0と形質の外部キーの関係  ( Foreign key relationship in slick 2 1 0 and traits ) 
だから私は既存のプロジェクトを持っています。私はこれのいずれかを書いていませんでした、そして、彼らがスリックを実行した方法の著者の選択は私をやや混乱させます。 これは既存のテーブル/スリックのクラスのセットです: <事前> <コード> case class ...

0  Slickでデータベースブランド/タイプを動的にチェックする方法  ( How do i check database brand type dynamically in slick ) 
私の単位テストでは、ProductionでOracleを使用し、H2を使用します。 Oracle Spatialを使用するため、OracleとH2では異なる方法でジオメトリオブジェクトを表現する必要があります。データベース内のジオメトリの種類を操作する必要はあ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有