SQLの未実装対応

SQLの未実装なものが多かったので、今回、大幅に対応しました。

  • 関数を使えるようにしました
  • SUB QUERYに対応しまいた。
  • (テーブル名) [AS] (エイリアス) の文法に対応しました(ASは省略可)
  • FROM句の複数テーブルに対応しました。

Alinous-Coreでは、2つの言語体系を同時に扱っているので実装にはかなりテクニックがいりました。

とりあえず、こんな感じの文法は扱えるようになりました。


String sql = "SELECT TEST1.NAM,TEST3.CHILD,TEST1.CHILD" +
" FROM " +
"((TEST1 INNER JOIN TEST3 ON TEST1.CODE = TEST3.CODE) " +
"LEFT JOIN TEST2 ON (TEST1.CODE = TEST2.CODE) " +
"AND (TEST3.SEQN = TEST2.SEQN))";
parse(sql);

sql = "SELECT A.colA, Count(col1) FROM TAB Y, TE A";
parse(sql);

sql = "SELECT * FROM TAB Y, TE A";
parse(sql);

sql = "SELECT count(A.B) FROM TAB Y, TE A";
parse(sql);

sql = "SELECT A.col1, count(*, col1, $value), A.col2 FROM TAB Y, TE A";
parse(sql);

sql = "SELECT * FROM TAB Y, TE A WHERE TAB.a = now()";
parse(sql);

sql = "SELECT * FROM TAB Y, TE A WHERE TAB.a = now() and A.x = test(A.y, $aaa)";
parse(sql);

sql = "SELECT * FROM TAB Y, TE A WHERE ((TAB.a = now() or Y.col1=A.col2) and A.x = test(A.y, $aaa))";
parse(sql);

sql = "INSERT INTO TABLE1 VALUES(now(), test(A.y, $aaa))";
parse(sql);

sql = "UPDATE TABLE1 as T SET T.col1=now(), T.colB=(test(A.y, $aaa))";
parse(sql);

sql = "UPDATE TABLE1 T SET T.col1=now(), T.colB=test(A.y, $aaa), colCo=count(*)";
parse(sql);

sql = "UPDATE TABLE1 T SET T.col1=now(), T.colB=(SELECT col2 from test1 WHERE col1 = 'VAL')";
parse(sql);