# 2012 December 17
#
# The author disclaims copyright to this source code.  In place of
# a legal notice, here is a blessing:
#
#    May you do good and not evil.
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#*************************************************************************
#
#

set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix fts5expr1

foreach {tn expr res} {
  1 { abc }                  {"abc"}
  2 { abc AND def }          {"abc" AND "def"}
  3 { (abc) }                {"abc"}
  4 { (((abc))) }            {"abc"}
  5 { one OR two AND three } {"one" OR ("two" AND "three")}
  6 { one AND two OR three } {("one" AND "two") OR "three"}

  7 { "abc def" }            {"abc"+"def"}
  8 {  abc+def  }            {"abc"+"def"}
  9 { "abc def" + ghi }      {"abc"+"def"+"ghi"}

  10 { one AND two OR three   } {("one" AND "two") OR "three"}
  11 { one AND (two OR three) } {"one" AND ("two" OR "three")}

  12 { "abc""def" }             {"abc"+"def"}
  13 { "abc" "def" }            {"abc" AND "def"}
  14 { "abc" + "def" }          {"abc"+"def"}

  15 { a NOT b AND c OR d }     {(("a" NOT "b") AND "c") OR "d"}
  16 { a OR b AND c NOT d }     {"a" OR ("b" AND ("c" NOT "d"))}
  17 { (a OR b) AND c NOT d }   {("a" OR "b") AND ("c" NOT "d")}

  18 { a NEAR/10 b }                {"a" NEAR/10 "b"}
  19 { a NEAR b }                   {"a" NEAR/10 "b"}
  20 { a AND b OR c + d NEAR/52 e } {("a" AND "b") OR ("c"+"d" NEAR/52 "e")}

} {
  do_execsql_test 1.$tn { 
    SELECT fts5_parse_expr('simple', $expr, '') 
  } [list [string trim $res]]
}

do_execsql_test 2.0 { 
  CREATE TABLE t1(a, b, c);
}

foreach {tn expr res} {
  1 { a : abc }                  {"a":"abc"}
  2 { b : abc + def}             {"b":"abc"+"def"}
} {
  do_execsql_test 2.$tn { 
    SELECT fts5_parse_expr('simple', $expr, 't1') 
  } [list [string trim $res]]
}

breakpoint
foreach {tn expr res} {
  1 { abc* }                  {"abc"*}
} {
  do_execsql_test 3.$tn { 
    SELECT fts5_parse_expr('simple', $expr, 't1') 
  } [list [string trim $res]]
}


finish_test
