データベースからデータを引き出す必要があるという要件があります。クエリは-
SELECT e.Data AS EntityBlob, f.Data AS FpmlBlob
FROM [Trades.InventoryRecord] ir, EntityBlob e, FpmlBlob f
WHERE %s AND uid = e.uid AND uid = f.uid
ここで %s は、ユーザーが html フォームから入力する where 句の後の述語です。
ユーザー入力は次の形式になります:
1. TradeDate = ' 2013-04-05
' AND IsLatest = 'TRUE'
2. StreamId= ' IA0015
'
3. クエリには IN 句も含まれる場合があります
このクエリがレンダリングされると、あいまいな列 streamId またはあいまいな列 IsLatest の例外が発生します。これらの列は、同じ名前の複数のテーブルに存在するためです。したがって、このあいまいさを取り除くには、クエリを ir.IsLatest または ir.StreamId のように変更する必要があります。
Java コードでこれを行うには、最初に where 句の後の述語を解析し、列名を抽出し、各列名の前にテーブル名のエイリアス「ir」を挿入して、クエリが次のようになるようにする必要があります。
SELECT e.Data AS EntityBlob, f.Data AS FpmlBlob
FROM [Trades.InventoryRecord] ir, EntityBlob e, FpmlBlob f
WHERE ir.TradeDate = '2013-04-05' AND ir.IsLatest = 'TRUE' AND uid = e.uid AND uid = f.uid
この述語を解析する最良の方法は何ですか、または同じ結果を達成できる他の方法がある場合はどうすればよいですか?