2017-09-19 3 views
-1

私はpostgresのSQL文に注入安全な引数を渡そうとしています。データベース/ sql libと一緒にgoでCOALESCEを使用するには?

Goでデータベース/ SQLパッケージのDB.Queryを使用してarugementsを渡すのに少し問題があります。

これはPostgresが

STATEMENT: SELECT mc.company_name_full, msc.company_id, msc.cdate, msc.value->>'n_rules', msc.value->>'pct_interfaces_classified' 
        FROM mn_company AS mc INNER JOIN mn_statistics_company AS msc 
         ON (mc.id = msc.company_id) 
        WHERE (msc.value->>'n_rules')::int>0 AND (msc.value->>'pct_interfaces_classified')::int>0 AND 
         msc.company_id = COALESCE('$1', msc.company_id) AND 
         mc.company_name_full ~* COALESCE('$2', mc.company_name_full) AND 
         msc.cdate >= COALESCE('$3', 2017-07-01) AND 
        msc.cdate <= COALESCE('$4', 2017-09-19) 

を登録する何これはa.DB.Queryに貼り付けされているすべての引数がポインタである私の関数呼び出し

rows, err := a.DB.Query(*query, qf.companyIDFilter, qf.companyNameFilter, firstDate, secondDate) 

です。

私は、$ 1、$ 2を置き換えるしようとしている...引数

+0

逆参照しようとしましたか? '行、エラー:= a.DB.Query(*クエリ、* qf.companyIDFilter、* qf.companyNameFilter、...)'? –

+0

デフォルト値はnullですが...文字列としてNULLを渡すと、sqlクエリがnullであることを知ることができますか? –

答えて

1

でプレースホルダ($1$2、...)周りからの引用符を削除します。

query := `SELECT mc.company_name_full, msc.company_id, msc.cdate, msc.value->>'n_rules', msc.value->>'pct_interfaces_classified' 
        FROM mn_company AS mc INNER JOIN mn_statistics_company AS msc 
         ON (mc.id = msc.company_id) 
        WHERE (msc.value->>'n_rules')::int>0 AND (msc.value->>'pct_interfaces_classified')::int>0 AND 
         msc.company_id = COALESCE($1, msc.company_id) AND 
         mc.company_name_full ~* COALESCE($2, mc.company_name_full) AND 
         msc.cdate >= COALESCE($3, 2017-07-01) AND 
        msc.cdate <= COALESCE($4, 2017-09-19)` 

のlib/PQパッケージは必要に応じて自動的に引用符を追加します。

関連する問題