Tarantool development patches archive
 help / color / mirror / Atom feed
* [tarantool-patches] [PATCH 0/2] Fix type aliases in SQL
@ 2019-07-29 23:34 Nikita Pettik
  2019-07-29 23:34 ` [tarantool-patches] [PATCH 1/2] sql: add STRING alias to TEXT type Nikita Pettik
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Nikita Pettik @ 2019-07-29 23:34 UTC (permalink / raw)
  To: tarantool-patches; +Cc: kostja, Nikita Pettik

Branch: https://github.com/tarantool/tarantool/tree/np/sql-type-aliases

Justification is described in commit messages, but the main
point is to make NoSQL type system be consistent with SQL one
at least in types naming.

The only concern I've noticed: CAST to NUMBER always results in
coversion of integer or string literal to floating point value.
Meanwhile, number can hold integer values. So the question is
should CAST("integer_literal" AS NUMBER) return floating point,
or just be no-op in this case...?

Nikita Pettik (2):
  sql: add STRING alias to TEXT type
  sql: rename REAL/FLOAT/DOUBLE types to NUMBER

 extra/mkkeywordhash.c                    |   8 +-
 src/box/lua/lua_sql.c                    |   4 +-
 src/box/sql/parse.y                      |   3 +-
 test/sql-tap/analyze5.test.lua           |   2 +-
 test/sql-tap/analyzeF.test.lua           |   2 +-
 test/sql-tap/atof1.test.lua              |   2 +-
 test/sql-tap/autoinc.test.lua            |   4 +-
 test/sql-tap/boundary3.test.lua          | 772 +++++++++++++++----------------
 test/sql-tap/cast.test.lua               |  76 +--
 test/sql-tap/check.test.lua              |   4 +-
 test/sql-tap/default.test.lua            |   4 +-
 test/sql-tap/e_select1.test.lua          |  18 +-
 test/sql-tap/func.test.lua               |   2 +-
 test/sql-tap/in1.test.lua                |   2 +-
 test/sql-tap/in3.test.lua                |   4 +-
 test/sql-tap/in4.test.lua                |   2 +-
 test/sql-tap/index1.test.lua             |   8 +-
 test/sql-tap/insert3.test.lua            |   2 +-
 test/sql-tap/keyword1.test.lua           |   3 +-
 test/sql-tap/numcast.test.lua            |   2 +-
 test/sql-tap/pragma.test.lua             |   2 +-
 test/sql-tap/select3.test.lua            |   8 +-
 test/sql-tap/select4.test.lua            |   2 +-
 test/sql-tap/select7.test.lua            |   4 +-
 test/sql-tap/sort.test.lua               |   4 +-
 test/sql-tap/table.test.lua              |   2 +-
 test/sql-tap/tkt-3998683a16.test.lua     |   2 +-
 test/sql-tap/tkt-91e2e8ba6f.test.lua     |   2 +-
 test/sql-tap/tkt-9a8b09f8e6.test.lua     |   4 +-
 test/sql-tap/tkt1444.test.lua            |   2 +-
 test/sql-tap/tkt2192.test.lua            |   2 +-
 test/sql-tap/transitive1.test.lua        |   2 +-
 test/sql-tap/trigger5.test.lua           |   2 +-
 test/sql-tap/types.test.lua              |   2 +-
 test/sql-tap/where7.test.lua             |   4 +-
 test/sql-tap/whereA.test.lua             |   2 +-
 test/sql-tap/whereB.test.lua             |   8 +-
 test/sql/bind.result                     |   2 +-
 test/sql/bind.test.lua                   |   2 +-
 test/sql/checks.result                   |   4 +-
 test/sql/checks.test.lua                 |   4 +-
 test/sql/drop-index.result               |   2 +-
 test/sql/drop-index.test.lua             |   2 +-
 test/sql/errinj.result                   |   4 +-
 test/sql/errinj.test.lua                 |   4 +-
 test/sql/gh-2929-primary-key.result      |   6 +-
 test/sql/gh-2929-primary-key.test.lua    |   6 +-
 test/sql/gh2251-multiple-update.result   |   2 +-
 test/sql/gh2251-multiple-update.test.lua |   2 +-
 test/sql/integer-overflow.result         |   2 +-
 test/sql/integer-overflow.test.lua       |   2 +-
 test/sql/iproto.result                   |   2 +-
 test/sql/iproto.test.lua                 |   2 +-
 test/sql/persistency.result              |   2 +-
 test/sql/persistency.test.lua            |   2 +-
 test/sql/transition.result               |   2 +-
 test/sql/transition.test.lua             |   2 +-
 test/sql/triggers.result                 |   4 +-
 test/sql/triggers.test.lua               |   4 +-
 test/sql/types.result                    |  21 +-
 test/sql/types.test.lua                  |  12 +-
 61 files changed, 548 insertions(+), 527 deletions(-)

-- 
2.15.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tarantool-patches] [PATCH 1/2] sql: add STRING alias to TEXT type
  2019-07-29 23:34 [tarantool-patches] [PATCH 0/2] Fix type aliases in SQL Nikita Pettik
@ 2019-07-29 23:34 ` Nikita Pettik
  2019-07-30  7:18   ` [tarantool-patches] " Konstantin Osipov
  2019-07-30  7:19   ` Konstantin Osipov
  2019-07-29 23:34 ` [tarantool-patches] [PATCH 2/2] sql: rename REAL/FLOAT/DOUBLE types to NUMBER Nikita Pettik
  2019-07-30 14:21 ` [tarantool-patches] Re: [PATCH 0/2] Fix type aliases in SQL Kirill Yukhin
  2 siblings, 2 replies; 7+ messages in thread
From: Nikita Pettik @ 2019-07-29 23:34 UTC (permalink / raw)
  To: tarantool-patches; +Cc: kostja, Nikita Pettik

TEXT type is called "string" in the original Tarantool NoSQL, so it would
be rational to allow using the same type name in SQL.
---
 extra/mkkeywordhash.c   |  1 +
 src/box/sql/parse.y     |  1 +
 test/sql/types.result   | 13 +++++++++++++
 test/sql/types.test.lua |  6 ++++++
 4 files changed, 21 insertions(+)

diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
index 64a5bbfc6..a353d4781 100644
--- a/extra/mkkeywordhash.c
+++ b/extra/mkkeywordhash.c
@@ -176,6 +176,7 @@ static Keyword aKeywordTable[] = {
   { "SET",                    "TK_SET",         ALWAYS,           true  },
   { "SIMPLE",                 "TK_SIMPLE",      ALWAYS,           true  },
   { "START",                  "TK_START",       ALWAYS,           true  },
+  { "STRING",                 "TK_STRING_KW",   ALWAYS,           true  },
   { "TABLE",                  "TK_TABLE",       ALWAYS,           true  },
   { "THEN",                   "TK_THEN",        ALWAYS,           true  },
   { "TO",                     "TK_TO",          ALWAYS,           true  },
diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index d4e1ec859..3929ed9c6 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -1725,6 +1725,7 @@ wqlist(A) ::= wqlist(A) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
 ////////////////////////////// TYPE DECLARATION ///////////////////////////////
 %type typedef {struct type_def}
 typedef(A) ::= TEXT . { A.type = FIELD_TYPE_STRING; }
+typedef(A) ::= STRING_KW . { A.type = FIELD_TYPE_STRING; }
 typedef(A) ::= SCALAR . { A.type = FIELD_TYPE_SCALAR; }
 /** BOOL | BOOLEAN is not used due to possible bug in Lemon. */
 typedef(A) ::= BOOL . { A.type = FIELD_TYPE_BOOLEAN; }
diff --git a/test/sql/types.result b/test/sql/types.result
index 4589b2d58..0dc90d5a4 100644
--- a/test/sql/types.result
+++ b/test/sql/types.result
@@ -1751,3 +1751,16 @@ box.execute("SELECT CAST('-123' AS UNSIGNED);")
 box.space.T1:drop()
 ---
 ...
+-- Check that STRING is a valid alias to TEXT type.
+--
+box.execute("CREATE TABLE t (id STRING PRIMARY KEY);")
+---
+- row_count: 1
+...
+box.space.T:format()[1].type
+---
+- string
+...
+box.space.T:drop()
+---
+...
diff --git a/test/sql/types.test.lua b/test/sql/types.test.lua
index f07a90b37..06de8c977 100644
--- a/test/sql/types.test.lua
+++ b/test/sql/types.test.lua
@@ -399,3 +399,9 @@ box.execute("SELECT CAST('123' AS UNSIGNED);")
 box.execute("SELECT CAST('-123' AS UNSIGNED);")
 
 box.space.T1:drop()
+
+-- Check that STRING is a valid alias to TEXT type.
+--
+box.execute("CREATE TABLE t (id STRING PRIMARY KEY);")
+box.space.T:format()[1].type
+box.space.T:drop()
-- 
2.15.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tarantool-patches] [PATCH 2/2] sql: rename REAL/FLOAT/DOUBLE types to NUMBER
  2019-07-29 23:34 [tarantool-patches] [PATCH 0/2] Fix type aliases in SQL Nikita Pettik
  2019-07-29 23:34 ` [tarantool-patches] [PATCH 1/2] sql: add STRING alias to TEXT type Nikita Pettik
@ 2019-07-29 23:34 ` Nikita Pettik
  2019-07-30  7:21   ` [tarantool-patches] " Konstantin Osipov
  2019-07-30 14:21 ` [tarantool-patches] Re: [PATCH 0/2] Fix type aliases in SQL Kirill Yukhin
  2 siblings, 1 reply; 7+ messages in thread
From: Nikita Pettik @ 2019-07-29 23:34 UTC (permalink / raw)
  To: tarantool-patches; +Cc: kostja, Nikita Pettik

Before this patch it was allowed to specify REAL/FLOAT/DOUBLE types
which matched with NUMBER NoSQL type in space format. However, NUMBER is
different from standard floating point types, since it is able to hold
integers in range [-2^63; 2^64-1] alongside with double precision
floating point values. Hence, to not confuse users it has been decided
to remove support of REAL/FLOAT/DOUBLE types from SQL grammar and use
instead original NUMBER type naming.
---
 extra/mkkeywordhash.c                    |   7 +-
 src/box/lua/lua_sql.c                    |   4 +-
 src/box/sql/parse.y                      |   2 +-
 test/sql-tap/analyze5.test.lua           |   2 +-
 test/sql-tap/analyzeF.test.lua           |   2 +-
 test/sql-tap/atof1.test.lua              |   2 +-
 test/sql-tap/autoinc.test.lua            |   4 +-
 test/sql-tap/boundary3.test.lua          | 772 +++++++++++++++----------------
 test/sql-tap/cast.test.lua               |  76 +--
 test/sql-tap/check.test.lua              |   4 +-
 test/sql-tap/default.test.lua            |   4 +-
 test/sql-tap/e_select1.test.lua          |  18 +-
 test/sql-tap/func.test.lua               |   2 +-
 test/sql-tap/in1.test.lua                |   2 +-
 test/sql-tap/in3.test.lua                |   4 +-
 test/sql-tap/in4.test.lua                |   2 +-
 test/sql-tap/index1.test.lua             |   8 +-
 test/sql-tap/insert3.test.lua            |   2 +-
 test/sql-tap/keyword1.test.lua           |   3 +-
 test/sql-tap/numcast.test.lua            |   2 +-
 test/sql-tap/pragma.test.lua             |   2 +-
 test/sql-tap/select3.test.lua            |   8 +-
 test/sql-tap/select4.test.lua            |   2 +-
 test/sql-tap/select7.test.lua            |   4 +-
 test/sql-tap/sort.test.lua               |   4 +-
 test/sql-tap/table.test.lua              |   2 +-
 test/sql-tap/tkt-3998683a16.test.lua     |   2 +-
 test/sql-tap/tkt-91e2e8ba6f.test.lua     |   2 +-
 test/sql-tap/tkt-9a8b09f8e6.test.lua     |   4 +-
 test/sql-tap/tkt1444.test.lua            |   2 +-
 test/sql-tap/tkt2192.test.lua            |   2 +-
 test/sql-tap/transitive1.test.lua        |   2 +-
 test/sql-tap/trigger5.test.lua           |   2 +-
 test/sql-tap/types.test.lua              |   2 +-
 test/sql-tap/where7.test.lua             |   4 +-
 test/sql-tap/whereA.test.lua             |   2 +-
 test/sql-tap/whereB.test.lua             |   8 +-
 test/sql/bind.result                     |   2 +-
 test/sql/bind.test.lua                   |   2 +-
 test/sql/checks.result                   |   4 +-
 test/sql/checks.test.lua                 |   4 +-
 test/sql/drop-index.result               |   2 +-
 test/sql/drop-index.test.lua             |   2 +-
 test/sql/errinj.result                   |   4 +-
 test/sql/errinj.test.lua                 |   4 +-
 test/sql/gh-2929-primary-key.result      |   6 +-
 test/sql/gh-2929-primary-key.test.lua    |   6 +-
 test/sql/gh2251-multiple-update.result   |   2 +-
 test/sql/gh2251-multiple-update.test.lua |   2 +-
 test/sql/integer-overflow.result         |   2 +-
 test/sql/integer-overflow.test.lua       |   2 +-
 test/sql/iproto.result                   |   2 +-
 test/sql/iproto.test.lua                 |   2 +-
 test/sql/persistency.result              |   2 +-
 test/sql/persistency.test.lua            |   2 +-
 test/sql/transition.result               |   2 +-
 test/sql/transition.test.lua             |   2 +-
 test/sql/triggers.result                 |   4 +-
 test/sql/triggers.test.lua               |   4 +-
 test/sql/types.result                    |   8 +-
 test/sql/types.test.lua                  |   6 +-
 61 files changed, 527 insertions(+), 527 deletions(-)

diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
index a353d4781..df34aa775 100644
--- a/extra/mkkeywordhash.c
+++ b/extra/mkkeywordhash.c
@@ -148,6 +148,7 @@ static Keyword aKeywordTable[] = {
   { "NO",                     "TK_NO",          FKEY,             false },
   { "NOT",                    "TK_NOT",         ALWAYS,           true  },
   { "NULL",                   "TK_NULL",        ALWAYS,           true  },
+  { "NUMBER",                 "TK_NUMBER",      ALWAYS,           true  },
   { "OF",                     "TK_OF",          ALWAYS,           true  },
   { "OFFSET",                 "TK_OFFSET",      ALWAYS,           false },
   { "ON",                     "TK_ON",          ALWAYS,           true  },
@@ -216,10 +217,10 @@ static Keyword aKeywordTable[] = {
   { "DENSE_RANK",             "TK_STANDARD",    RESERVED,         true  },
   { "DESCRIBE",               "TK_STANDARD",    RESERVED,         true  },
   { "DETERMINISTIC",          "TK_STANDARD",    RESERVED,         true  },
-  { "DOUBLE",                 "TK_DOUBLE",      RESERVED,         true  },
+  { "DOUBLE",                 "TK_STANDARD",    RESERVED,         true  },
   { "ELSEIF",                 "TK_STANDARD",    RESERVED,         true  },
   { "FETCH",                  "TK_STANDARD",    RESERVED,         true  },
-  { "FLOAT",                  "TK_FLOAT_KW",    RESERVED,         true  },
+  { "FLOAT",                  "TK_STANDARD",    RESERVED,         true  },
   { "FUNCTION",               "TK_STANDARD",    RESERVED,         true  },
   { "GET",                    "TK_STANDARD",    RESERVED,         true  },
   { "GRANT",                  "TK_STANDARD",    RESERVED,         true  },
@@ -242,7 +243,7 @@ static Keyword aKeywordTable[] = {
   { "RANGE",                  "TK_STANDARD",    RESERVED,         true  },
   { "RANK",                   "TK_STANDARD",    RESERVED,         true  },
   { "READS",                  "TK_STANDARD",    RESERVED,         true  },
-  { "REAL",                   "TK_REAL",        RESERVED,         true  },
+  { "REAL",                   "TK_STANDARD",    RESERVED,         true  },
   { "REPEAT",                 "TK_STANDARD",    RESERVED,         true  },
   { "RESIGNAL",               "TK_STANDARD",    RESERVED,         true  },
   { "RETURN",                 "TK_STANDARD",    RESERVED,         true  },
diff --git a/src/box/lua/lua_sql.c b/src/box/lua/lua_sql.c
index 138252ea0..f900c7ca5 100644
--- a/src/box/lua/lua_sql.c
+++ b/src/box/lua/lua_sql.c
@@ -164,9 +164,7 @@ lbox_sql_create_function(struct lua_State *L)
 		type = FIELD_TYPE_INTEGER;
 	else if (strcmp(type_arg, "TEXT") == 0)
 		type = FIELD_TYPE_STRING;
-	else if (strcmp(type_arg, "FLOAT") == 0)
-		type = FIELD_TYPE_NUMBER;
-	else if (strcmp(type_arg, "NUM") == 0)
+	else if (strcmp(type_arg, "NUMBER") == 0)
 		type = FIELD_TYPE_NUMBER;
 	else if (strcmp(type_arg, "BLOB") == 0)
 		type = FIELD_TYPE_SCALAR;
diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index 3929ed9c6..c4d60368d 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -1754,7 +1754,7 @@ typedef(A) ::= VARCHAR char_len(B) . {
 
 %type number_typedef {struct type_def}
 typedef(A) ::= number_typedef(A) .
-number_typedef(A) ::= FLOAT_KW|REAL|DOUBLE . { A.type = FIELD_TYPE_NUMBER; }
+number_typedef(A) ::= NUMBER . { A.type = FIELD_TYPE_NUMBER; }
 number_typedef(A) ::= INT|INTEGER_KW . { A.type = FIELD_TYPE_INTEGER; }
 number_typedef(A) ::= UNSIGNED . { A.type = FIELD_TYPE_UNSIGNED; }
 
diff --git a/test/sql-tap/analyze5.test.lua b/test/sql-tap/analyze5.test.lua
index f2583d5ef..45e76492a 100755
--- a/test/sql-tap/analyze5.test.lua
+++ b/test/sql-tap/analyze5.test.lua
@@ -62,7 +62,7 @@ test:do_test(
     function()
         -- Tarantool: waiting for #2130
         -- test:execsql("CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, t INT ,u INT ,v TEXT COLLATE nocase,w INT ,x INT ,y INT ,z INT )")
-        test:execsql("CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, t TEXT ,u TEXT ,v TEXT ,w TEXT ,x TEXT ,y TEXT ,z FLOAT)")
+        test:execsql("CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, t TEXT ,u TEXT ,v TEXT ,w TEXT ,x TEXT ,y TEXT ,z NUMBER)")
         for i=0,999 do -- _ in X(0, "X!for", [=[["set i 0","$i < 1000","incr i"]]=]) do
             if  ((i >= 25) and (i <= 50)) then
                 y = 1
diff --git a/test/sql-tap/analyzeF.test.lua b/test/sql-tap/analyzeF.test.lua
index 0df4db450..8f6fb5c97 100755
--- a/test/sql-tap/analyzeF.test.lua
+++ b/test/sql-tap/analyzeF.test.lua
@@ -22,7 +22,7 @@ local function isqrt(i)
     return math.floor(math.sqrt(i))
 end
 
-box.internal.sql_create_function("isqrt", "FLOAT", isqrt)
+box.internal.sql_create_function("isqrt", "NUMBER", isqrt)
 
 test:do_execsql_test(
     1.0,
diff --git a/test/sql-tap/atof1.test.lua b/test/sql-tap/atof1.test.lua
index 40778cd81..fe045427d 100755
--- a/test/sql-tap/atof1.test.lua
+++ b/test/sql-tap/atof1.test.lua
@@ -45,7 +45,7 @@ for i = 1, 10000 - 1, 1 do
     test:do_test(
         "atof1-1."..i..".2",
         function()
-            local y = test:execsql(string.format("SELECT %s=CAST(quote(%s) AS real)",x, x))
+            local y = test:execsql(string.format("SELECT %s=CAST(quote(%s) AS NUMBER)",x, x))
             return y
         end, {
             true
diff --git a/test/sql-tap/autoinc.test.lua b/test/sql-tap/autoinc.test.lua
index 260196845..1d0be8aef 100755
--- a/test/sql-tap/autoinc.test.lua
+++ b/test/sql-tap/autoinc.test.lua
@@ -541,7 +541,7 @@ test:do_catchsql_test(
 test:do_execsql_test(
     "autoinc-7.1",
     [[
-        CREATE TABLE t7(x INTEGER, y REAL, PRIMARY KEY(x AUTOINCREMENT));
+        CREATE TABLE t7(x INTEGER, y NUMBER, PRIMARY KEY(x AUTOINCREMENT));
         INSERT INTO t7(y) VALUES(123);
         INSERT INTO t7(y) VALUES(234);
         DELETE FROM t7;
@@ -627,7 +627,7 @@ test:do_test(
     function()
         return test:execsql([[
             DROP TABLE IF EXISTS t7;
-            CREATE TABLE t7(x INT, y REAL, PRIMARY KEY(x AUTOINCREMENT));
+            CREATE TABLE t7(x INT, y NUMBER, PRIMARY KEY(x AUTOINCREMENT));
             INSERT INTO t7(y) VALUES(123);
             INSERT INTO t7(y) VALUES(234);
             DELETE FROM t7;
diff --git a/test/sql-tap/boundary3.test.lua b/test/sql-tap/boundary3.test.lua
index fef15c93e..2f42b9bfb 100755
--- a/test/sql-tap/boundary3.test.lua
+++ b/test/sql-tap/boundary3.test.lua
@@ -26,7 +26,7 @@ test:do_test(
     "boundary3-1.1",
     function()
         return test:execsql([[
-            CREATE TABLE t1(rowid  INT primary key, a FLOAT ,x SCALAR);
+            CREATE TABLE t1(rowid  INT primary key, a NUMBER ,x SCALAR);
             INSERT INTO t1(rowid,a,x) VALUES(-8388609,1,'ffffffffff7fffff');
             INSERT INTO t1(rowid,a,x) VALUES(-36028797018963969,2,'ff7fffffffffffff');
             INSERT INTO t1(rowid,a,x) VALUES(9223372036854775806,3,'7fffffffffffffff');
@@ -109,7 +109,7 @@ test:do_test(
     "boundary3-1.3",
     function()
         return test:execsql([[
-            CREATE TABLE t2(r INT primary key, a REAL);
+            CREATE TABLE t2(r INT primary key, a NUMBER);
             INSERT INTO t2 SELECT rowid, a FROM t1;
             CREATE INDEX t2i1 ON t2(r);
             CREATE INDEX t2i2 ON t2(a);
@@ -282,12 +282,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.2.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=16 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=16 ORDER BY t1.rowid"
     ,{23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.2.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=16 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=16 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23})
 
 test:do_execsql_test(
@@ -317,12 +317,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.2.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=16 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=16 ORDER BY t1.rowid"
     ,{16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.2.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=16 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=16 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16})
 
 test:do_execsql_test(
@@ -352,12 +352,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.2.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=16 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=16 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8})
 
 test:do_execsql_test(
     "boundary3-2.2.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=16 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=16 ORDER BY t1.rowid DESC"
     ,{8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -387,12 +387,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.2.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=16 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=16 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16})
 
 test:do_execsql_test(
     "boundary3-2.2.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=16 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=16 ORDER BY t1.rowid DESC"
     ,{16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -437,12 +437,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.3.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=36 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=36 ORDER BY t1.rowid"
     ,{39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.3.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=36 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=36 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39})
 
 test:do_execsql_test(
@@ -472,12 +472,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.3.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=36 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=36 ORDER BY t1.rowid"
     ,{36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.3.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=36 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=36 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36})
 
 test:do_execsql_test(
@@ -507,12 +507,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.3.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=36 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=36 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14})
 
 test:do_execsql_test(
     "boundary3-2.3.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=36 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=36 ORDER BY t1.rowid DESC"
     ,{14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -542,12 +542,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.3.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=36 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=36 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36})
 
 test:do_execsql_test(
     "boundary3-2.3.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=36 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=36 ORDER BY t1.rowid DESC"
     ,{36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -592,12 +592,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.4.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=6 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=6 ORDER BY t1.rowid"
     ,{12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.4.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=6 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=6 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12})
 
 test:do_execsql_test(
@@ -627,12 +627,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.4.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=6 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=6 ORDER BY t1.rowid"
     ,{6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.4.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=6 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=6 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6})
 
 test:do_execsql_test(
@@ -662,12 +662,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.4.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=6 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=6 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9})
 
 test:do_execsql_test(
     "boundary3-2.4.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=6 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=6 ORDER BY t1.rowid DESC"
     ,{9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -697,12 +697,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.4.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=6 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=6 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6})
 
 test:do_execsql_test(
     "boundary3-2.4.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=6 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=6 ORDER BY t1.rowid DESC"
     ,{6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -747,12 +747,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.5.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=29 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=29 ORDER BY t1.rowid"
     ,{32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.5.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=29 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=29 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32})
 
 test:do_execsql_test(
@@ -782,12 +782,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.5.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=29 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=29 ORDER BY t1.rowid"
     ,{29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.5.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=29 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=29 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29})
 
 test:do_execsql_test(
@@ -817,12 +817,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.5.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=29 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=29 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37})
 
 test:do_execsql_test(
     "boundary3-2.5.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=29 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=29 ORDER BY t1.rowid DESC"
     ,{37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -852,12 +852,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.5.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=29 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=29 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29})
 
 test:do_execsql_test(
     "boundary3-2.5.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=29 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=29 ORDER BY t1.rowid DESC"
     ,{29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1017,12 +1017,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.7.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=41 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=41 ORDER BY t1.rowid"
     ,{5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.7.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=41 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=41 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5})
 
 test:do_execsql_test(
@@ -1052,12 +1052,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.7.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=41 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=41 ORDER BY t1.rowid"
     ,{41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.7.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=41 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=41 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41})
 
 test:do_execsql_test(
@@ -1087,12 +1087,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.7.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=41 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=41 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60})
 
 test:do_execsql_test(
     "boundary3-2.7.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=41 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=41 ORDER BY t1.rowid DESC"
     ,{60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1122,12 +1122,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.7.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=41 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=41 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41})
 
 test:do_execsql_test(
     "boundary3-2.7.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=41 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=41 ORDER BY t1.rowid DESC"
     ,{41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1172,12 +1172,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.8.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=31 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=31 ORDER BY t1.rowid"
     ,{4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.8.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=31 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=31 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4})
 
 test:do_execsql_test(
@@ -1207,12 +1207,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.8.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=31 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=31 ORDER BY t1.rowid"
     ,{31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.8.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=31 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=31 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31})
 
 test:do_execsql_test(
@@ -1242,12 +1242,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.8.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=31 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=31 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5})
 
 test:do_execsql_test(
     "boundary3-2.8.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=31 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=31 ORDER BY t1.rowid DESC"
     ,{5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1277,12 +1277,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.8.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=31 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=31 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31})
 
 test:do_execsql_test(
     "boundary3-2.8.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=31 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=31 ORDER BY t1.rowid DESC"
     ,{31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1442,12 +1442,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.10.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=61 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=61 ORDER BY t1.rowid"
     ,{8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.10.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=61 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=61 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8})
 
 test:do_execsql_test(
@@ -1477,12 +1477,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.10.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=61 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=61 ORDER BY t1.rowid"
     ,{61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.10.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=61 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=61 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61})
 
 test:do_execsql_test(
@@ -1512,12 +1512,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.10.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=61 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=61 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30})
 
 test:do_execsql_test(
     "boundary3-2.10.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=61 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=61 ORDER BY t1.rowid DESC"
     ,{30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1547,12 +1547,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.10.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=61 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=61 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61})
 
 test:do_execsql_test(
     "boundary3-2.10.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=61 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=61 ORDER BY t1.rowid DESC"
     ,{61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1597,12 +1597,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.11.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=22 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=22 ORDER BY t1.rowid"
     ,{46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.11.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=22 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=22 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46})
 
 test:do_execsql_test(
@@ -1632,12 +1632,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.11.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=22 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=22 ORDER BY t1.rowid"
     ,{22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.11.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=22 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=22 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22})
 
 test:do_execsql_test(
@@ -1667,12 +1667,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.11.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=22 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=22 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39})
 
 test:do_execsql_test(
     "boundary3-2.11.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=22 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=22 ORDER BY t1.rowid DESC"
     ,{39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1702,12 +1702,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.11.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=22 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=22 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22})
 
 test:do_execsql_test(
     "boundary3-2.11.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=22 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=22 ORDER BY t1.rowid DESC"
     ,{22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1752,12 +1752,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.12.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=62 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=62 ORDER BY t1.rowid"
     ,{15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.12.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=62 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=62 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15})
 
 test:do_execsql_test(
@@ -1787,12 +1787,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.12.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=62 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=62 ORDER BY t1.rowid"
     ,{62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.12.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=62 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=62 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62})
 
 test:do_execsql_test(
@@ -1822,12 +1822,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.12.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=62 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=62 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48})
 
 test:do_execsql_test(
     "boundary3-2.12.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=62 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=62 ORDER BY t1.rowid DESC"
     ,{48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1857,12 +1857,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.12.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=62 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=62 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62})
 
 test:do_execsql_test(
     "boundary3-2.12.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=62 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=62 ORDER BY t1.rowid DESC"
     ,{62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -1907,12 +1907,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.13.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=40 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=40 ORDER BY t1.rowid"
     ,{20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.13.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=40 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=40 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20})
 
 test:do_execsql_test(
@@ -1942,12 +1942,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.13.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=40 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=40 ORDER BY t1.rowid"
     ,{40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.13.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=40 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=40 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40})
 
 test:do_execsql_test(
@@ -1977,12 +1977,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.13.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=40 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=40 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12})
 
 test:do_execsql_test(
     "boundary3-2.13.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=40 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=40 ORDER BY t1.rowid DESC"
     ,{12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2012,12 +2012,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.13.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=40 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=40 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40})
 
 test:do_execsql_test(
     "boundary3-2.13.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=40 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=40 ORDER BY t1.rowid DESC"
     ,{40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2177,12 +2177,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.15.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=19 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=19 ORDER BY t1.rowid"
     ,{7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.15.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=19 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=19 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7})
 
 test:do_execsql_test(
@@ -2212,12 +2212,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.15.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=19 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=19 ORDER BY t1.rowid"
     ,{19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.15.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=19 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=19 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19})
 
 test:do_execsql_test(
@@ -2247,12 +2247,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.15.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=19 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=19 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57})
 
 test:do_execsql_test(
     "boundary3-2.15.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=19 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=19 ORDER BY t1.rowid DESC"
     ,{57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2282,12 +2282,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.15.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=19 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=19 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19})
 
 test:do_execsql_test(
     "boundary3-2.15.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=19 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=19 ORDER BY t1.rowid DESC"
     ,{19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2432,12 +2432,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.17.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=50 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=50 ORDER BY t1.rowid"
     ,{48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.17.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=50 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=50 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48})
 
 test:do_execsql_test(
@@ -2467,12 +2467,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.17.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=50 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=50 ORDER BY t1.rowid"
     ,{50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.17.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=50 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=50 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50})
 
 test:do_execsql_test(
@@ -2502,12 +2502,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.17.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=50 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=50 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23})
 
 test:do_execsql_test(
     "boundary3-2.17.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=50 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=50 ORDER BY t1.rowid DESC"
     ,{23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2537,12 +2537,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.17.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=50 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=50 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50})
 
 test:do_execsql_test(
     "boundary3-2.17.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=50 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=50 ORDER BY t1.rowid DESC"
     ,{50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2702,12 +2702,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.19.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=48 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=48 ORDER BY t1.rowid"
     ,{62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.19.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=48 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=48 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62})
 
 test:do_execsql_test(
@@ -2737,12 +2737,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.19.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=48 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=48 ORDER BY t1.rowid"
     ,{48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.19.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=48 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=48 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48})
 
 test:do_execsql_test(
@@ -2772,12 +2772,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.19.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=48 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=48 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50})
 
 test:do_execsql_test(
     "boundary3-2.19.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=48 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=48 ORDER BY t1.rowid DESC"
     ,{50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2807,12 +2807,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.19.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=48 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=48 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48})
 
 test:do_execsql_test(
     "boundary3-2.19.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=48 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=48 ORDER BY t1.rowid DESC"
     ,{48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2857,12 +2857,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.20.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=14 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=14 ORDER BY t1.rowid"
     ,{36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.20.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=14 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=14 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36})
 
 test:do_execsql_test(
@@ -2892,12 +2892,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.20.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=14 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=14 ORDER BY t1.rowid"
     ,{14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.20.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=14 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=14 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14})
 
 test:do_execsql_test(
@@ -2927,12 +2927,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.20.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=14 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=14 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51})
 
 test:do_execsql_test(
     "boundary3-2.20.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=14 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=14 ORDER BY t1.rowid DESC"
     ,{51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -2962,12 +2962,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.20.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=14 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=14 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14})
 
 test:do_execsql_test(
     "boundary3-2.20.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=14 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=14 ORDER BY t1.rowid DESC"
     ,{14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3012,12 +3012,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.21.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=57 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=57 ORDER BY t1.rowid"
     ,{19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.21.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=57 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=57 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19})
 
 test:do_execsql_test(
@@ -3047,12 +3047,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.21.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=57 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=57 ORDER BY t1.rowid"
     ,{57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.21.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=57 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=57 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57})
 
 test:do_execsql_test(
@@ -3082,12 +3082,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.21.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=57 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=57 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35})
 
 test:do_execsql_test(
     "boundary3-2.21.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=57 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=57 ORDER BY t1.rowid DESC"
     ,{35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3117,12 +3117,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.21.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=57 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=57 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57})
 
 test:do_execsql_test(
     "boundary3-2.21.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=57 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=57 ORDER BY t1.rowid DESC"
     ,{57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3167,12 +3167,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.22.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=37 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=37 ORDER BY t1.rowid"
     ,{29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.22.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=37 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=37 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29})
 
 test:do_execsql_test(
@@ -3202,12 +3202,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.22.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=37 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=37 ORDER BY t1.rowid"
     ,{37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.22.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=37 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=37 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37})
 
 test:do_execsql_test(
@@ -3237,12 +3237,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.22.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=37 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=37 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1})
 
 test:do_execsql_test(
     "boundary3-2.22.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=37 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=37 ORDER BY t1.rowid DESC"
     ,{1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3272,12 +3272,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.22.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=37 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=37 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37})
 
 test:do_execsql_test(
     "boundary3-2.22.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=37 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=37 ORDER BY t1.rowid DESC"
     ,{37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3322,12 +3322,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.23.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=35 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=35 ORDER BY t1.rowid"
     ,{57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.23.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=35 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=35 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57})
 
 test:do_execsql_test(
@@ -3357,12 +3357,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.23.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=35 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=35 ORDER BY t1.rowid"
     ,{35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.23.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=35 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=35 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35})
 
 test:do_execsql_test(
@@ -3392,12 +3392,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.23.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=35 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=35 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46})
 
 test:do_execsql_test(
     "boundary3-2.23.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=35 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=35 ORDER BY t1.rowid DESC"
     ,{46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3427,12 +3427,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.23.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=35 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=35 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35})
 
 test:do_execsql_test(
     "boundary3-2.23.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=35 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=35 ORDER BY t1.rowid DESC"
     ,{35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3477,12 +3477,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.24.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=18 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=18 ORDER BY t1.rowid"
     ,{24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.24.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=18 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=18 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24})
 
 test:do_execsql_test(
@@ -3512,12 +3512,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.24.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=18 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=18 ORDER BY t1.rowid"
     ,{18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.24.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=18 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=18 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18})
 
 test:do_execsql_test(
@@ -3547,12 +3547,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.24.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=18 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=18 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42})
 
 test:do_execsql_test(
     "boundary3-2.24.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=18 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=18 ORDER BY t1.rowid DESC"
     ,{42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3582,12 +3582,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.24.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=18 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=18 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18})
 
 test:do_execsql_test(
     "boundary3-2.24.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=18 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=18 ORDER BY t1.rowid DESC"
     ,{18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3632,12 +3632,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.25.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=52 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=52 ORDER BY t1.rowid"
     ,{33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.25.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=52 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=52 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33})
 
 test:do_execsql_test(
@@ -3667,12 +3667,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.25.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=52 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=52 ORDER BY t1.rowid"
     ,{52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.25.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=52 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=52 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52})
 
 test:do_execsql_test(
@@ -3702,12 +3702,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.25.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=52 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=52 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53})
 
 test:do_execsql_test(
     "boundary3-2.25.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=52 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=52 ORDER BY t1.rowid DESC"
     ,{53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3737,12 +3737,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.25.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=52 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=52 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52})
 
 test:do_execsql_test(
     "boundary3-2.25.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=52 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=52 ORDER BY t1.rowid DESC"
     ,{52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3787,12 +3787,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.26.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=59 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=59 ORDER BY t1.rowid"
     ,{60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.26.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=59 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=59 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60})
 
 test:do_execsql_test(
@@ -3822,12 +3822,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.26.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=59 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=59 ORDER BY t1.rowid"
     ,{59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.26.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=59 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=59 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59})
 
 test:do_execsql_test(
@@ -3857,12 +3857,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.26.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=59 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=59 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38})
 
 test:do_execsql_test(
     "boundary3-2.26.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=59 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=59 ORDER BY t1.rowid DESC"
     ,{38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3892,12 +3892,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.26.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=59 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=59 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59})
 
 test:do_execsql_test(
     "boundary3-2.26.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=59 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=59 ORDER BY t1.rowid DESC"
     ,{59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -3942,12 +3942,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.27.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=38 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=38 ORDER BY t1.rowid"
     ,{59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.27.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=38 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=38 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59})
 
 test:do_execsql_test(
@@ -3977,12 +3977,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.27.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=38 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=38 ORDER BY t1.rowid"
     ,{38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.27.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=38 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=38 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38})
 
 test:do_execsql_test(
@@ -4012,12 +4012,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.27.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=38 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=38 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33})
 
 test:do_execsql_test(
     "boundary3-2.27.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=38 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=38 ORDER BY t1.rowid DESC"
     ,{33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4047,12 +4047,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.27.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=38 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=38 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38})
 
 test:do_execsql_test(
     "boundary3-2.27.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=38 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=38 ORDER BY t1.rowid DESC"
     ,{38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4097,12 +4097,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.28.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=33 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=33 ORDER BY t1.rowid"
     ,{38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.28.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=33 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=33 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38})
 
 test:do_execsql_test(
@@ -4132,12 +4132,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.28.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=33 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=33 ORDER BY t1.rowid"
     ,{33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.28.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=33 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=33 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33})
 
 test:do_execsql_test(
@@ -4167,12 +4167,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.28.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=33 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=33 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52})
 
 test:do_execsql_test(
     "boundary3-2.28.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=33 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=33 ORDER BY t1.rowid DESC"
     ,{52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4202,12 +4202,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.28.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=33 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=33 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33})
 
 test:do_execsql_test(
     "boundary3-2.28.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=33 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=33 ORDER BY t1.rowid DESC"
     ,{33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4252,12 +4252,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.29.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=42 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=42 ORDER BY t1.rowid"
     ,{18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.29.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=42 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=42 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18})
 
 test:do_execsql_test(
@@ -4287,12 +4287,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.29.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=42 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=42 ORDER BY t1.rowid"
     ,{42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.29.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=42 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=42 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42})
 
 test:do_execsql_test(
@@ -4322,12 +4322,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.29.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=42 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=42 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15})
 
 test:do_execsql_test(
     "boundary3-2.29.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=42 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=42 ORDER BY t1.rowid DESC"
     ,{15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4357,12 +4357,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.29.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=42 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=42 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42})
 
 test:do_execsql_test(
     "boundary3-2.29.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=42 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=42 ORDER BY t1.rowid DESC"
     ,{42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4407,12 +4407,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.30.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=49 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=49 ORDER BY t1.rowid"
     ,{30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.30.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=49 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=49 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30})
 
 test:do_execsql_test(
@@ -4442,12 +4442,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.30.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=49 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=49 ORDER BY t1.rowid"
     ,{49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.30.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=49 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=49 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49})
 
 test:do_execsql_test(
@@ -4477,12 +4477,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.30.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=49 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=49 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4})
 
 test:do_execsql_test(
     "boundary3-2.30.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=49 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=49 ORDER BY t1.rowid DESC"
     ,{4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4512,12 +4512,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.30.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=49 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=49 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49})
 
 test:do_execsql_test(
     "boundary3-2.30.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=49 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=49 ORDER BY t1.rowid DESC"
     ,{49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4562,12 +4562,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.31.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=30 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=30 ORDER BY t1.rowid"
     ,{61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.31.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=30 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=30 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61})
 
 test:do_execsql_test(
@@ -4597,12 +4597,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.31.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=30 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=30 ORDER BY t1.rowid"
     ,{30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.31.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=30 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=30 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30})
 
 test:do_execsql_test(
@@ -4632,12 +4632,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.31.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=30 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=30 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49})
 
 test:do_execsql_test(
     "boundary3-2.31.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=30 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=30 ORDER BY t1.rowid DESC"
     ,{49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4667,12 +4667,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.31.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=30 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=30 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30})
 
 test:do_execsql_test(
     "boundary3-2.31.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=30 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=30 ORDER BY t1.rowid DESC"
     ,{30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4717,12 +4717,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.32.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=11 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=11 ORDER BY t1.rowid"
     ,{1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.32.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=11 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=11 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1})
 
 test:do_execsql_test(
@@ -4752,12 +4752,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.32.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=11 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=11 ORDER BY t1.rowid"
     ,{11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.32.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=11 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=11 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11})
 
 test:do_execsql_test(
@@ -4787,12 +4787,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.32.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=11 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=11 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47})
 
 test:do_execsql_test(
     "boundary3-2.32.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=11 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=11 ORDER BY t1.rowid DESC"
     ,{47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4822,12 +4822,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.32.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=11 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=11 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11})
 
 test:do_execsql_test(
     "boundary3-2.32.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=11 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=11 ORDER BY t1.rowid DESC"
     ,{11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4872,12 +4872,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.33.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=39 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=39 ORDER BY t1.rowid"
     ,{22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.33.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=39 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=39 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22})
 
 test:do_execsql_test(
@@ -4907,12 +4907,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.33.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=39 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=39 ORDER BY t1.rowid"
     ,{39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.33.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=39 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=39 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39})
 
 test:do_execsql_test(
@@ -4942,12 +4942,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.33.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=39 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=39 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36})
 
 test:do_execsql_test(
     "boundary3-2.33.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=39 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=39 ORDER BY t1.rowid DESC"
     ,{36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -4977,12 +4977,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.33.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=39 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=39 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39})
 
 test:do_execsql_test(
     "boundary3-2.33.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=39 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=39 ORDER BY t1.rowid DESC"
     ,{39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5027,12 +5027,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.34.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=58 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=58 ORDER BY t1.rowid"
     ,{63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.34.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=58 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=58 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63})
 
 test:do_execsql_test(
@@ -5062,12 +5062,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.34.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=58 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=58 ORDER BY t1.rowid"
     ,{58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.34.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=58 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=58 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58})
 
 test:do_execsql_test(
@@ -5097,12 +5097,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.34.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=58 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=58 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44})
 
 test:do_execsql_test(
     "boundary3-2.34.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=58 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=58 ORDER BY t1.rowid DESC"
     ,{44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5132,12 +5132,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.34.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=58 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=58 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58})
 
 test:do_execsql_test(
     "boundary3-2.34.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=58 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=58 ORDER BY t1.rowid DESC"
     ,{58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5182,12 +5182,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.35.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=32 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=32 ORDER BY t1.rowid"
     ,{54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.35.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=32 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=32 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54})
 
 test:do_execsql_test(
@@ -5217,12 +5217,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.35.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=32 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=32 ORDER BY t1.rowid"
     ,{32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.35.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=32 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=32 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32})
 
 test:do_execsql_test(
@@ -5252,12 +5252,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.35.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=32 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=32 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29})
 
 test:do_execsql_test(
     "boundary3-2.35.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=32 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=32 ORDER BY t1.rowid DESC"
     ,{29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5287,12 +5287,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.35.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=32 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=32 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32})
 
 test:do_execsql_test(
     "boundary3-2.35.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=32 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=32 ORDER BY t1.rowid DESC"
     ,{32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5337,12 +5337,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.36.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=20 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=20 ORDER BY t1.rowid"
     ,{51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.36.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=20 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=20 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51})
 
 test:do_execsql_test(
@@ -5372,12 +5372,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.36.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=20 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=20 ORDER BY t1.rowid"
     ,{20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.36.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=20 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=20 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20})
 
 test:do_execsql_test(
@@ -5407,12 +5407,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.36.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=20 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=20 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40})
 
 test:do_execsql_test(
     "boundary3-2.36.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=20 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=20 ORDER BY t1.rowid DESC"
     ,{40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5442,12 +5442,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.36.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=20 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=20 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20})
 
 test:do_execsql_test(
     "boundary3-2.36.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=20 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=20 ORDER BY t1.rowid DESC"
     ,{20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5492,12 +5492,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.37.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=54 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=54 ORDER BY t1.rowid"
     ,{53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.37.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=54 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=54 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53})
 
 test:do_execsql_test(
@@ -5527,12 +5527,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.37.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=54 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=54 ORDER BY t1.rowid"
     ,{54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.37.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=54 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=54 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54})
 
 test:do_execsql_test(
@@ -5562,12 +5562,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.37.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=54 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=54 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32})
 
 test:do_execsql_test(
     "boundary3-2.37.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=54 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=54 ORDER BY t1.rowid DESC"
     ,{32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5597,12 +5597,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.37.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=54 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=54 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54})
 
 test:do_execsql_test(
     "boundary3-2.37.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=54 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=54 ORDER BY t1.rowid DESC"
     ,{54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5647,12 +5647,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.38.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=53 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=53 ORDER BY t1.rowid"
     ,{52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.38.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=53 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=53 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52})
 
 test:do_execsql_test(
@@ -5682,12 +5682,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.38.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=53 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=53 ORDER BY t1.rowid"
     ,{53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.38.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=53 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=53 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53})
 
 test:do_execsql_test(
@@ -5717,12 +5717,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.38.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=53 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=53 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54})
 
 test:do_execsql_test(
     "boundary3-2.38.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=53 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=53 ORDER BY t1.rowid DESC"
     ,{54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5752,12 +5752,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.38.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=53 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=53 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53})
 
 test:do_execsql_test(
     "boundary3-2.38.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=53 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=53 ORDER BY t1.rowid DESC"
     ,{53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -5917,12 +5917,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.40.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=51 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=51 ORDER BY t1.rowid"
     ,{14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.40.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=51 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=51 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14})
 
 test:do_execsql_test(
@@ -5952,12 +5952,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.40.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=51 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=51 ORDER BY t1.rowid"
     ,{51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.40.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=51 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=51 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51})
 
 test:do_execsql_test(
@@ -5987,12 +5987,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.40.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=51 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=51 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20})
 
 test:do_execsql_test(
     "boundary3-2.40.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=51 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=51 ORDER BY t1.rowid DESC"
     ,{20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6022,12 +6022,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.40.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=51 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=51 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51})
 
 test:do_execsql_test(
     "boundary3-2.40.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=51 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=51 ORDER BY t1.rowid DESC"
     ,{51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6072,12 +6072,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.41.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=46 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=46 ORDER BY t1.rowid"
     ,{35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.41.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=46 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=46 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35})
 
 test:do_execsql_test(
@@ -6107,12 +6107,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.41.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=46 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=46 ORDER BY t1.rowid"
     ,{46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.41.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=46 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=46 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46})
 
 test:do_execsql_test(
@@ -6142,12 +6142,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.41.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=46 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=46 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22})
 
 test:do_execsql_test(
     "boundary3-2.41.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=46 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=46 ORDER BY t1.rowid DESC"
     ,{22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6177,12 +6177,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.41.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=46 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=46 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46})
 
 test:do_execsql_test(
     "boundary3-2.41.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=46 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=46 ORDER BY t1.rowid DESC"
     ,{46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6227,12 +6227,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.42.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=63 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=63 ORDER BY t1.rowid"
     ,{47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.42.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=63 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=63 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47})
 
 test:do_execsql_test(
@@ -6262,12 +6262,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.42.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=63 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=63 ORDER BY t1.rowid"
     ,{63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.42.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=63 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=63 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63})
 
 test:do_execsql_test(
@@ -6297,12 +6297,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.42.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=63 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=63 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58})
 
 test:do_execsql_test(
     "boundary3-2.42.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=63 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=63 ORDER BY t1.rowid DESC"
     ,{58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6332,12 +6332,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.42.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=63 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=63 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63})
 
 test:do_execsql_test(
     "boundary3-2.42.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=63 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=63 ORDER BY t1.rowid DESC"
     ,{63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6497,12 +6497,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.44.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=7 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=7 ORDER BY t1.rowid"
     ,{56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.44.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=7 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=7 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56})
 
 test:do_execsql_test(
@@ -6532,12 +6532,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.44.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=7 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=7 ORDER BY t1.rowid"
     ,{7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.44.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=7 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=7 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7})
 
 test:do_execsql_test(
@@ -6567,12 +6567,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.44.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=7 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=7 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19})
 
 test:do_execsql_test(
     "boundary3-2.44.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=7 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=7 ORDER BY t1.rowid DESC"
     ,{19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6602,12 +6602,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.44.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=7 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=7 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7})
 
 test:do_execsql_test(
     "boundary3-2.44.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=7 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=7 ORDER BY t1.rowid DESC"
     ,{7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6652,12 +6652,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.45.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=12 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=12 ORDER BY t1.rowid"
     ,{40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.45.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=12 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=12 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40})
 
 test:do_execsql_test(
@@ -6687,12 +6687,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.45.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=12 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=12 ORDER BY t1.rowid"
     ,{12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.45.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=12 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=12 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12})
 
 test:do_execsql_test(
@@ -6722,12 +6722,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.45.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=12 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=12 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6})
 
 test:do_execsql_test(
     "boundary3-2.45.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=12 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=12 ORDER BY t1.rowid DESC"
     ,{6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -6757,12 +6757,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.45.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=12 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=12 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12})
 
 test:do_execsql_test(
     "boundary3-2.45.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=12 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=12 ORDER BY t1.rowid DESC"
     ,{12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7037,12 +7037,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.48.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=1 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=1 ORDER BY t1.rowid"
     ,{37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.48.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=1 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=1 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37})
 
 test:do_execsql_test(
@@ -7072,12 +7072,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.48.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=1 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=1 ORDER BY t1.rowid"
     ,{1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.48.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=1 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=1 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1})
 
 test:do_execsql_test(
@@ -7107,12 +7107,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.48.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=1 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=1 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11})
 
 test:do_execsql_test(
     "boundary3-2.48.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=1 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=1 ORDER BY t1.rowid DESC"
     ,{11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7142,12 +7142,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.48.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=1 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=1 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1})
 
 test:do_execsql_test(
     "boundary3-2.48.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=1 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=1 ORDER BY t1.rowid DESC"
     ,{1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7192,12 +7192,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.49.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=9 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=9 ORDER BY t1.rowid"
     ,{6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.49.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=9 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=9 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6})
 
 test:do_execsql_test(
@@ -7227,12 +7227,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.49.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=9 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=9 ORDER BY t1.rowid"
     ,{9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.49.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=9 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=9 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9})
 
 test:do_execsql_test(
@@ -7262,12 +7262,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.49.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=9 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=9 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24})
 
 test:do_execsql_test(
     "boundary3-2.49.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=9 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=9 ORDER BY t1.rowid DESC"
     ,{24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7297,12 +7297,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.49.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=9 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=9 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9})
 
 test:do_execsql_test(
     "boundary3-2.49.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=9 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=9 ORDER BY t1.rowid DESC"
     ,{9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7347,12 +7347,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.50.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=24 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=24 ORDER BY t1.rowid"
     ,{9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.50.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=24 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=24 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9})
 
 test:do_execsql_test(
@@ -7382,12 +7382,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.50.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=24 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=24 ORDER BY t1.rowid"
     ,{24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.50.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=24 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=24 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24})
 
 test:do_execsql_test(
@@ -7417,12 +7417,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.50.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=24 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=24 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18})
 
 test:do_execsql_test(
     "boundary3-2.50.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=24 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=24 ORDER BY t1.rowid DESC"
     ,{18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7452,12 +7452,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.50.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=24 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=24 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24})
 
 test:do_execsql_test(
     "boundary3-2.50.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=24 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=24 ORDER BY t1.rowid DESC"
     ,{24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7502,12 +7502,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.51.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=8 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=8 ORDER BY t1.rowid"
     ,{16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.51.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=8 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=8 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16})
 
 test:do_execsql_test(
@@ -7537,12 +7537,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.51.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=8 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=8 ORDER BY t1.rowid"
     ,{8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.51.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=8 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=8 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8})
 
 test:do_execsql_test(
@@ -7572,12 +7572,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.51.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=8 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=8 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61})
 
 test:do_execsql_test(
     "boundary3-2.51.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=8 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=8 ORDER BY t1.rowid DESC"
     ,{61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7607,12 +7607,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.51.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=8 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=8 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8})
 
 test:do_execsql_test(
     "boundary3-2.51.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=8 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=8 ORDER BY t1.rowid DESC"
     ,{8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7772,12 +7772,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.53.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=15 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=15 ORDER BY t1.rowid"
     ,{42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.53.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=15 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=15 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42})
 
 test:do_execsql_test(
@@ -7807,12 +7807,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.53.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=15 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=15 ORDER BY t1.rowid"
     ,{15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.53.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=15 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=15 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15})
 
 test:do_execsql_test(
@@ -7842,12 +7842,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.53.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=15 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=15 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62})
 
 test:do_execsql_test(
     "boundary3-2.53.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=15 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=15 ORDER BY t1.rowid DESC"
     ,{62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -7877,12 +7877,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.53.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=15 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=15 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15})
 
 test:do_execsql_test(
     "boundary3-2.53.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=15 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=15 ORDER BY t1.rowid DESC"
     ,{15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -8157,12 +8157,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.56.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=23 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=23 ORDER BY t1.rowid"
     ,{50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.56.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=23 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=23 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50})
 
 test:do_execsql_test(
@@ -8192,12 +8192,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.56.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=23 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=23 ORDER BY t1.rowid"
     ,{23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.56.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=23 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=23 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23})
 
 test:do_execsql_test(
@@ -8227,12 +8227,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.56.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=23 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=23 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16})
 
 test:do_execsql_test(
     "boundary3-2.56.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=23 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=23 ORDER BY t1.rowid DESC"
     ,{16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -8262,12 +8262,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.56.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=23 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=23 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23})
 
 test:do_execsql_test(
     "boundary3-2.56.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=23 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=23 ORDER BY t1.rowid DESC"
     ,{23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -8312,12 +8312,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.57.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=4 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=4 ORDER BY t1.rowid"
     ,{49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.57.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=4 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=4 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49})
 
 test:do_execsql_test(
@@ -8347,12 +8347,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.57.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=4 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=4 ORDER BY t1.rowid"
     ,{4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.57.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=4 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=4 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4})
 
 test:do_execsql_test(
@@ -8382,12 +8382,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.57.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=4 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=4 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31})
 
 test:do_execsql_test(
     "boundary3-2.57.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=4 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=4 ORDER BY t1.rowid DESC"
     ,{31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -8417,12 +8417,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.57.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=4 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=4 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4})
 
 test:do_execsql_test(
     "boundary3-2.57.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=4 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=4 ORDER BY t1.rowid DESC"
     ,{4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -8582,12 +8582,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.59.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=56 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=56 ORDER BY t1.rowid"
     ,{25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.59.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=56 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=56 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25})
 
 test:do_execsql_test(
@@ -8617,12 +8617,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.59.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=56 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=56 ORDER BY t1.rowid"
     ,{56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.59.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=56 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=56 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56})
 
 test:do_execsql_test(
@@ -8652,12 +8652,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.59.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=56 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=56 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7})
 
 test:do_execsql_test(
     "boundary3-2.59.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=56 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=56 ORDER BY t1.rowid DESC"
     ,{7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -8687,12 +8687,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.59.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=56 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=56 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56})
 
 test:do_execsql_test(
     "boundary3-2.59.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=56 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=56 ORDER BY t1.rowid DESC"
     ,{56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -8737,12 +8737,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.60.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=60 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=60 ORDER BY t1.rowid"
     ,{41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.60.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=60 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=60 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41})
 
 test:do_execsql_test(
@@ -8772,12 +8772,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.60.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=60 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=60 ORDER BY t1.rowid"
     ,{60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.60.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=60 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=60 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60})
 
 test:do_execsql_test(
@@ -8807,12 +8807,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.60.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=60 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=60 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59})
 
 test:do_execsql_test(
     "boundary3-2.60.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=60 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=60 ORDER BY t1.rowid DESC"
     ,{59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -8842,12 +8842,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.60.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=60 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=60 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60})
 
 test:do_execsql_test(
     "boundary3-2.60.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=60 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=60 ORDER BY t1.rowid DESC"
     ,{60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -9007,12 +9007,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.62.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=47 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=47 ORDER BY t1.rowid"
     ,{11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.62.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=47 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=47 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11})
 
 test:do_execsql_test(
@@ -9042,12 +9042,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.62.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=47 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=47 ORDER BY t1.rowid"
     ,{47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.62.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=47 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=47 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47})
 
 test:do_execsql_test(
@@ -9077,12 +9077,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.62.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=47 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=47 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63})
 
 test:do_execsql_test(
     "boundary3-2.62.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=47 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=47 ORDER BY t1.rowid DESC"
     ,{63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -9112,12 +9112,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.62.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=47 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=47 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47})
 
 test:do_execsql_test(
     "boundary3-2.62.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=47 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=47 ORDER BY t1.rowid DESC"
     ,{47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -9277,12 +9277,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.64.gt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=5 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=5 ORDER BY t1.rowid"
     ,{31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.64.gt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS real) WHERE t2.a=5 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid > CAST(t2.r AS NUMBER) WHERE t2.a=5 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31})
 
 test:do_execsql_test(
@@ -9312,12 +9312,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.64.ge.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=5 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=5 ORDER BY t1.rowid"
     ,{5, 31, 4, 49, 30, 61, 8, 16, 23, 50, 48, 62, 15, 42, 18, 24, 9, 6, 12, 40, 20, 51, 14, 36, 39, 22, 46, 35, 57, 19, 7, 56, 25, 34, 10, 26, 13, 43, 27, 45, 17, 28, 3})
 
 test:do_execsql_test(
     "boundary3-2.64.ge.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS real) WHERE t2.a=5 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid >= CAST(t2.r AS NUMBER) WHERE t2.a=5 ORDER BY t1.rowid DESC"
     ,{3, 28, 17, 45, 27, 43, 13, 26, 10, 34, 25, 56, 7, 19, 57, 35, 46, 22, 39, 36, 14, 51, 20, 40, 12, 6, 9, 24, 18, 42, 15, 62, 48, 50, 23, 16, 8, 61, 30, 49, 4, 31, 5})
 
 test:do_execsql_test(
@@ -9347,12 +9347,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.64.lt.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=5 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=5 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41})
 
 test:do_execsql_test(
     "boundary3-2.64.lt.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS real) WHERE t2.a=5 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid < CAST(t2.r AS NUMBER) WHERE t2.a=5 ORDER BY t1.rowid DESC"
     ,{41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
@@ -9382,12 +9382,12 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "boundary3-2.64.le.10",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=5 ORDER BY t1.rowid"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=5 ORDER BY t1.rowid"
     ,{55, 2, 64, 21, 44, 58, 63, 47, 11, 1, 37, 29, 32, 54, 53, 52, 33, 38, 59, 60, 41, 5})
 
 test:do_execsql_test(
     "boundary3-2.64.le.11",
-    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS real) WHERE t2.a=5 ORDER BY t1.rowid DESC"
+    "SELECT t1.a FROM  t1 JOIN t2 ON t1.rowid <= CAST(t2.r AS NUMBER) WHERE t2.a=5 ORDER BY t1.rowid DESC"
     ,{5, 41, 60, 59, 38, 33, 52, 53, 54, 32, 29, 37, 1, 11, 47, 63, 58, 44, 21, 64, 2, 55})
 
 test:do_execsql_test(
diff --git a/test/sql-tap/cast.test.lua b/test/sql-tap/cast.test.lua
index 9fc4ff11f..667fc0d34 100755
--- a/test/sql-tap/cast.test.lua
+++ b/test/sql-tap/cast.test.lua
@@ -67,7 +67,7 @@ test:do_execsql_test(
 test:do_catchsql_test(
     "cast-1.5",
     [[
-        SELECT CAST(x'616263' AS FLOAT)
+        SELECT CAST(x'616263' AS NUMBER)
     ]], {
         -- <cast-1.5>
         1, 'Type mismatch: can not convert abc to number'
@@ -147,7 +147,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-1.15",
     [[
-        SELECT CAST(NULL AS FLOAT)
+        SELECT CAST(NULL AS NUMBER)
     ]], {
         -- <cast-1.15>
         ""
@@ -157,7 +157,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-1.16",
     [[
-        SELECT typeof(CAST(NULL AS FLOAT))
+        SELECT typeof(CAST(NULL AS NUMBER))
     ]], {
         -- <cast-1.16>
         "null"
@@ -247,7 +247,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-1.25",
     [[
-        SELECT CAST(123 AS FLOAT)
+        SELECT CAST(123 AS NUMBER)
     ]], {
         -- <cast-1.25>
         123
@@ -257,7 +257,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-1.26",
     [[
-        SELECT typeof(CAST(123 AS FLOAT))
+        SELECT typeof(CAST(123 AS NUMBER))
     ]], {
         -- <cast-1.26>
         "number"
@@ -347,7 +347,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-1.35",
     [[
-        SELECT CAST(123.456 AS FLOAT)
+        SELECT CAST(123.456 AS NUMBER)
     ]], {
         -- <cast-1.35>
         123.456
@@ -357,7 +357,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-1.36",
     [[
-        SELECT typeof(CAST(123.456 AS FLOAT))
+        SELECT typeof(CAST(123.456 AS NUMBER))
     ]], {
         -- <cast-1.36>
         "number"
@@ -447,7 +447,7 @@ test:do_execsql_test(
 test:do_catchsql_test(
     "cast-1.45",
     [[
-        SELECT CAST('123abc' AS FLOAT)
+        SELECT CAST('123abc' AS NUMBER)
     ]], {
         -- <cast-1.45>
         1, 'Type mismatch: can not convert 123abc to number'
@@ -477,7 +477,7 @@ test:do_catchsql_test(
 test:do_catchsql_test(
     "cast-1.51",
     [[
-        SELECT CAST('123.5abc' AS FLOAT)
+        SELECT CAST('123.5abc' AS NUMBER)
     ]], {
         -- <cast-1.51>
         1, 'Type mismatch: can not convert 123.5abc to number'
@@ -498,7 +498,7 @@ test:do_catchsql_test(
 test:do_execsql_test(
     "case-1.60",
     [[
-        SELECT CAST(null AS REAL)
+        SELECT CAST(null AS NUMBER)
     ]], {
         -- <case-1.60>
         ""
@@ -508,7 +508,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "case-1.61",
     [[
-        SELECT typeof(CAST(null AS REAL))
+        SELECT typeof(CAST(null AS NUMBER))
     ]], {
         -- <case-1.61>
         "null"
@@ -518,7 +518,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "case-1.62",
     [[
-        SELECT CAST(1 AS REAL)
+        SELECT CAST(1 AS NUMBER)
     ]], {
         -- <case-1.62>
         1.0
@@ -528,7 +528,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "case-1.63",
     [[
-        SELECT typeof(CAST(1 AS REAL))
+        SELECT typeof(CAST(1 AS NUMBER))
     ]], {
         -- <case-1.63>
         "number"
@@ -538,7 +538,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "case-1.64",
     [[
-        SELECT CAST('1' AS REAL)
+        SELECT CAST('1' AS NUMBER)
     ]], {
         -- <case-1.64>
         1.0
@@ -548,7 +548,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "case-1.65",
     [[
-        SELECT typeof(CAST('1' AS REAL))
+        SELECT typeof(CAST('1' AS NUMBER))
     ]], {
         -- <case-1.65>
         "number"
@@ -558,7 +558,7 @@ test:do_execsql_test(
 test:do_catchsql_test(
     "case-1.66",
     [[
-        SELECT CAST('abc' AS REAL)
+        SELECT CAST('abc' AS NUMBER)
     ]], {
         -- <case-1.66>
         1, 'Type mismatch: can not convert abc to number'
@@ -568,7 +568,7 @@ test:do_catchsql_test(
 test:do_execsql_test(
     "case-1.68",
     [[
-        SELECT CAST(x'31' AS REAL)
+        SELECT CAST(x'31' AS NUMBER)
     ]], {
         -- <case-1.68>
         1.0
@@ -578,7 +578,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "case-1.69",
     [[
-        SELECT typeof(CAST(x'31' AS REAL))
+        SELECT typeof(CAST(x'31' AS NUMBER))
     ]], {
         -- <case-1.69>
         "number"
@@ -600,7 +600,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-2.2",
     [[
-        SELECT CAST('   -123.456' AS real)
+        SELECT CAST('   -123.456' AS NUMBER)
     ]], {
         -- <cast-2.2>
         -123.456
@@ -625,7 +625,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-3.2",
     [[
-        SELECT CAST(9223372036854774800 AS FLOAT)
+        SELECT CAST(9223372036854774800 AS NUMBER)
     ]], {
         -- <cast-3.2>
         9223372036854774784
@@ -634,13 +634,13 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "cast-3.3",
-    "SELECT CAST(9223372036854774800 AS real)",
+    "SELECT CAST(9223372036854774800 AS NUMBER)",
     {9.22337203685477e+18})
 
 test:do_execsql_test(
     "cast-3.4",
     [[
-        SELECT CAST(CAST(9223372036854774800 AS real) AS integer)
+        SELECT CAST(CAST(9223372036854774800 AS NUMBER) AS integer)
     ]], {
         -- <cast-3.4>
         9223372036854774784LL
@@ -660,7 +660,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-3.6",
     [[
-        SELECT CAST(-9223372036854774800 AS float)
+        SELECT CAST(-9223372036854774800 AS NUMBER)
     ]], {
         -- <cast-3.6>
         -9223372036854774784
@@ -669,13 +669,13 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "cast-3.7",
-    "SELECT CAST(-9223372036854774800 AS real)",
+    "SELECT CAST(-9223372036854774800 AS NUMBER)",
     {-9.22337203685477e+18})
 
 test:do_execsql_test(
     "cast-3.8",
     [[
-        SELECT CAST(CAST(-9223372036854774800 AS real) AS integer)
+        SELECT CAST(CAST(-9223372036854774800 AS NUMBER) AS integer)
     ]], {
         -- <cast-3.8>
         -9223372036854774784LL
@@ -695,7 +695,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-3.12",
     [[
-        SELECT CAST('9223372036854774800' AS FLOAT)
+        SELECT CAST('9223372036854774800' AS NUMBER)
     ]], {
         -- <cast-3.12>
         9223372036854774784
@@ -704,13 +704,13 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "cast-3.13",
-    "SELECT CAST(9223372036854774800 AS real)",
+    "SELECT CAST(9223372036854774800 AS NUMBER)",
     {9.22337203685477e+18})
 
 test:do_execsql_test(
     "cast-3.14",
     [[
-        SELECT CAST(CAST('9223372036854774800' AS real) AS integer)
+        SELECT CAST(CAST('9223372036854774800' AS NUMBER) AS integer)
     ]], {
         -- <cast-3.14>
         9223372036854774784LL
@@ -732,7 +732,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "cast-3.16",
     [[
-        SELECT CAST('-9223372036854774800' AS FLOAT)
+        SELECT CAST('-9223372036854774800' AS NUMBER)
     ]], {
         -- <cast-3.16>
         -9223372036854774784
@@ -741,13 +741,13 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "cast-3.17",
-    "SELECT CAST('-9223372036854774800' AS real)",
+    "SELECT CAST('-9223372036854774800' AS NUMBER)",
     {-9.22337203685477e+18})
 
 test:do_execsql_test(
     "cast-3.18",
     [[
-        SELECT CAST(CAST('-9223372036854774800' AS real) AS integer)
+        SELECT CAST(CAST('-9223372036854774800' AS NUMBER) AS integer)
     ]], {
         -- <cast-3.18>
         -9223372036854774784LL
@@ -770,7 +770,7 @@ if true then --test:execsql("PRAGMA encoding")[1][1]=="UTF-8" then
     test:do_execsql_test(
         "cast-3.22",
         [[
-            SELECT CAST(x'39323233333732303336383534373734383030' AS FLOAT)
+            SELECT CAST(x'39323233333732303336383534373734383030' AS NUMBER)
         ]], {
             -- <cast-3.22>
             9223372036854774784
@@ -778,13 +778,13 @@ if true then --test:execsql("PRAGMA encoding")[1][1]=="UTF-8" then
         })
     test:do_execsql_test(
         "cast-3.23",
-        "SELECT CAST(x'39323233333732303336383534373734383030' AS real)",
+        "SELECT CAST(x'39323233333732303336383534373734383030' AS NUMBER)",
         {9.22337203685477e+18})
 
     test:do_execsql_test(
         "cast-3.24",
         [[
-            SELECT CAST(CAST(x'39323233333732303336383534373734383030' AS real)
+            SELECT CAST(CAST(x'39323233333732303336383534373734383030' AS NUMBER)
                         AS integer)
         ]], {
             -- <cast-3.24>
@@ -796,7 +796,7 @@ end
 test:do_execsql_test(
     "case-3.25",
     [[
-        SELECT CAST(x'3138343436373434303733373039353531363135' AS REAL);
+        SELECT CAST(x'3138343436373434303733373039353531363135' AS NUMBER);
     ]], { 1.844674407371e+19 } )
 
 test:do_execsql_test(
@@ -808,7 +808,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "case-3.31",
     [[
-        SELECT CAST(NULL AS FLOAT)
+        SELECT CAST(NULL AS NUMBER)
     ]], {
         -- <case-3.31>
         ""
@@ -825,7 +825,7 @@ test:do_test(
     function()
         blob = 1234567890
         DB = sql_connection_pointer("db")
-        STMT = sql_prepare(DB, "SELECT CAST(? AS real)", -1, "TAIL")
+        STMT = sql_prepare(DB, "SELECT CAST(? AS NUMBER)", -1, "TAIL")
         sql_bind_blob("-static", STMT, 1, blob, 5)
         return sql_step(STMT)
     end, {
@@ -883,7 +883,7 @@ test:do_test(
     "cast-4.4",
     function()
         return test:catchsql [[
-            SELECT a, CAST(a AS real), a FROM t1;
+            SELECT a, CAST(a AS NUMBER), a FROM t1;
         ]]
     end, {
         -- <cast-4.4>
diff --git a/test/sql-tap/check.test.lua b/test/sql-tap/check.test.lua
index 0c3cadd4e..7bd5f8177 100755
--- a/test/sql-tap/check.test.lua
+++ b/test/sql-tap/check.test.lua
@@ -29,7 +29,7 @@ test:do_execsql_test(
     [[
         CREATE TABLE t1(
           x INTEGER CHECK( x<5 ),
-          y REAL CHECK( y>x ),
+          y NUMBER CHECK( y>x ),
           z  INT primary key
         );
     ]], {
@@ -207,7 +207,7 @@ test:do_execsql_test(
         CREATE TABLE t2(
           id  INT primary key,
           x SCALAR CONSTRAINT one CHECK( typeof(coalesce(x,0))=='integer'),
-          y REAL CONSTRAINT two CHECK( typeof(coalesce(y,0.1))=='number' ),
+          y NUMBER CONSTRAINT two CHECK( typeof(coalesce(y,0.1))=='number' ),
           z SCALAR CONSTRAINT three CHECK( typeof(coalesce(z,''))=='string' )
         );
     ]], {
diff --git a/test/sql-tap/default.test.lua b/test/sql-tap/default.test.lua
index 55d16bcd7..f2a5db071 100755
--- a/test/sql-tap/default.test.lua
+++ b/test/sql-tap/default.test.lua
@@ -104,8 +104,8 @@ test:do_execsql_test(
 	a INTEGER PRIMARY KEY AUTOINCREMENT,
 	b INT DEFAULT 12345 UNIQUE NOT NULL CHECK( b>=0 AND b<99999 ),
 	c VARCHAR(123) DEFAULT 'hello' NOT NULL,
-	d REAL,
-	e FLOAT DEFAULT 4.36,
+	d NUMBER,
+	e NUMBER DEFAULT 4.36,
 	f VARCHAR(15), --COLLATE RTRIM,
 	g INTEGER DEFAULT( 3600*12 )
 	);
diff --git a/test/sql-tap/e_select1.test.lua b/test/sql-tap/e_select1.test.lua
index e5b63e12d..a0a671644 100755
--- a/test/sql-tap/e_select1.test.lua
+++ b/test/sql-tap/e_select1.test.lua
@@ -308,7 +308,7 @@ test:do_select_tests(
 -- clause, then the result of the join is simply the cartesian product of
 -- the left and right-hand datasets.
 --
---    The tests are built on this assertion. Really, they test that the output
+--    The tests are built on this assertion. NUMBERly, they test that the output
 --    of a CROSS JOIN, JOIN, INNER JOIN or "," join matches the expected result
 --    of calculating the cartesian product of the left and right-hand datasets.
 --
@@ -327,7 +327,7 @@ test:do_execsql_test(
     "e_select-1.4.0",
     [[
         CREATE TABLE x1(id  INT primary key, a TEXT , b TEXT );
-        CREATE TABLE x2(id  INT primary key, c FLOAT , d FLOAT , e FLOAT );
+        CREATE TABLE x2(id  INT primary key, c NUMBER , d NUMBER , e NUMBER );
         CREATE TABLE x3(id  INT primary key, f TEXT , g TEXT , h TEXT , i TEXT );
 
         -- x1: 3 rows, 2 columns
@@ -748,9 +748,9 @@ test:drop_all_tables()
 test:do_execsql_test(
     "e_select-4.0",
     [[
-        CREATE TABLE z1(id  INT primary key, a FLOAT, b FLOAT, c TEXT);
-        CREATE TABLE z2(id  INT primary key, d FLOAT, e FLOAT);
-        CREATE TABLE z3(id  INT primary key, a FLOAT, b FLOAT);
+        CREATE TABLE z1(id  INT primary key, a NUMBER, b NUMBER, c TEXT);
+        CREATE TABLE z2(id  INT primary key, d NUMBER, e NUMBER);
+        CREATE TABLE z3(id  INT primary key, a NUMBER, b NUMBER);
 
         INSERT INTO z1 VALUES(1, 51.65, -59.58, 'belfries');
         INSERT INTO z1 VALUES(2, -5, NULL, 75);
@@ -1453,8 +1453,8 @@ test:drop_all_tables()
 test:do_execsql_test(
     "e_select-7.4.0",
     [[
-        CREATE TABLE q1(id  INT primary key, a TEXT, b FLOAT, c FLOAT);
-        CREATE TABLE q2(id  INT primary key, d TEXT, e FLOAT);
+        CREATE TABLE q1(id  INT primary key, a TEXT, b NUMBER, c NUMBER);
+        CREATE TABLE q2(id  INT primary key, d TEXT, e NUMBER);
         CREATE TABLE q3(id  INT primary key, f TEXT, g INT);
 
         INSERT INTO q1 VALUES(1, 16, -87.66, NULL);
@@ -1599,7 +1599,7 @@ test:drop_all_tables()
 test:do_execsql_test(
     "e_select-7.10.0",
     [[
-        CREATE TABLE w1(a TEXT PRIMARY KEY, b FLOAT);
+        CREATE TABLE w1(a TEXT PRIMARY KEY, b NUMBER);
         CREATE TABLE w2(a  INT PRIMARY KEY, b TEXT);
 
         INSERT INTO w1 VALUES('1', 4.1);
@@ -1875,7 +1875,7 @@ test:do_select_tests(
 test:do_execsql_test(
     "e_select-8.8.0",
     [[
-        CREATE TABLE d3(id  INT primary key, a FLOAT);
+        CREATE TABLE d3(id  INT primary key, a NUMBER);
         INSERT INTO d3 VALUES(1, 0);
         INSERT INTO d3 VALUES(2, 14.1);
         INSERT INTO d3 VALUES(3, 13);
diff --git a/test/sql-tap/func.test.lua b/test/sql-tap/func.test.lua
index 961fd350a..e44b23dc2 100755
--- a/test/sql-tap/func.test.lua
+++ b/test/sql-tap/func.test.lua
@@ -357,7 +357,7 @@ test:do_test(
     "func-4.1",
     function()
         test:execsql([[
-            CREATE TABLE t1(id integer primary key, a INT,b REAL,c REAL);
+            CREATE TABLE t1(id integer primary key, a INT,b NUMBER,c NUMBER);
             INSERT INTO t1(id, a,b,c) VALUES(1, 1,2,3);
             INSERT INTO t1(id, a,b,c) VALUES(2, 2,1.2345678901234,-12345.67890);
             INSERT INTO t1(id, a,b,c) VALUES(3, 3,-2,-5);
diff --git a/test/sql-tap/in1.test.lua b/test/sql-tap/in1.test.lua
index 4a266c545..ba4c06936 100755
--- a/test/sql-tap/in1.test.lua
+++ b/test/sql-tap/in1.test.lua
@@ -623,7 +623,7 @@ test:do_catchsql_test(
 test:do_execsql_test(
     "in-11.1",
     [[
-        CREATE TABLE t6(a  INT PRIMARY KEY,b FLOAT);
+        CREATE TABLE t6(a  INT PRIMARY KEY,b NUMBER);
         INSERT INTO t6 VALUES(1,2);
         INSERT INTO t6 VALUES(2,3);
         SELECT * FROM t6 WHERE b IN (2);
diff --git a/test/sql-tap/in3.test.lua b/test/sql-tap/in3.test.lua
index ce42c5cdb..e29db9d93 100755
--- a/test/sql-tap/in3.test.lua
+++ b/test/sql-tap/in3.test.lua
@@ -290,12 +290,12 @@ test:do_test(
             DROP TABLE IF EXISTS t1;
             DROP TABLE IF EXISTS t1;
 
-            CREATE TABLE t1(id  INT primary key, a SCALAR, b FLOAT ,c TEXT);
+            CREATE TABLE t1(id  INT primary key, a SCALAR, b NUMBER ,c TEXT);
             CREATE UNIQUE INDEX t1_i1 ON t1(a);        /* no affinity */
             CREATE UNIQUE INDEX t1_i2 ON t1(b);        /* numeric affinity */
             CREATE UNIQUE INDEX t1_i3 ON t1(c);        /* text affinity */
 
-            CREATE TABLE t2(id  INT primary key, x SCALAR, y FLOAT, z TEXT);
+            CREATE TABLE t2(id  INT primary key, x SCALAR, y NUMBER, z TEXT);
             CREATE UNIQUE INDEX t2_i1 ON t2(x);        /* no affinity */
             CREATE UNIQUE INDEX t2_i2 ON t2(y);        /* numeric affinity */
             CREATE UNIQUE INDEX t2_i3 ON t2(z);        /* text affinity */
diff --git a/test/sql-tap/in4.test.lua b/test/sql-tap/in4.test.lua
index 92427b657..8c6917379 100755
--- a/test/sql-tap/in4.test.lua
+++ b/test/sql-tap/in4.test.lua
@@ -588,7 +588,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "in4-4.11",
     [[
-        CREATE TABLE t4b(a TEXT, b FLOAT, c  INT PRIMARY KEY);
+        CREATE TABLE t4b(a TEXT, b NUMBER, c  INT PRIMARY KEY);
         INSERT INTO t4b VALUES('1.0',1,4);
         SELECT c FROM t4b WHERE a=b;
     ]], {
diff --git a/test/sql-tap/index1.test.lua b/test/sql-tap/index1.test.lua
index db3113131..16209715d 100755
--- a/test/sql-tap/index1.test.lua
+++ b/test/sql-tap/index1.test.lua
@@ -279,7 +279,7 @@ test:do_test(
     "index-6.1",
     function()
         test:execsql "CREATE TABLE test1(id  INT primary key, f1 int, f2 int)"
-        test:execsql "CREATE TABLE test2(id  INT primary key, g1 float, g2 float)"
+        test:execsql "CREATE TABLE test2(id  INT primary key, g1 NUMBER, g2 NUMBER)"
         return test:execsql "CREATE INDEX index1 ON test1(f1)"
     end, {
         -- <index-6.1>
@@ -578,7 +578,7 @@ test:do_test(
             CREATE TABLE t3(
               a text,
               b int,
-              c float,
+              c NUMBER,
               PRIMARY KEY(b)
             );
         ]]
@@ -605,7 +605,7 @@ end
 test:do_execsql_test(
     "index-12.1",
     [[
-        CREATE TABLE t4(id  INT primary key, a FLOAT,b INT );
+        CREATE TABLE t4(id  INT primary key, a NUMBER,b INT );
         INSERT INTO t4 VALUES(1, '0.0',1);
         INSERT INTO t4 VALUES(2, '0.00',2);
         INSERT INTO t4 VALUES(4, '-1.0',4);
@@ -688,7 +688,7 @@ test:do_execsql_test(
     [[
         CREATE TABLE t5(
            a int UNIQUE,
-           b float PRIMARY KEY,
+           b NUMBER PRIMARY KEY,
            c  TEXT,
            UNIQUE(a,c)
         );
diff --git a/test/sql-tap/insert3.test.lua b/test/sql-tap/insert3.test.lua
index 3eb30a7f8..43bb06630 100755
--- a/test/sql-tap/insert3.test.lua
+++ b/test/sql-tap/insert3.test.lua
@@ -236,7 +236,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "insert3-3.7",
     [[
-            CREATE TABLE t6(id INTEGER PRIMARY KEY AUTOINCREMENT, x INT ,y FLOAT DEFAULT 4.3, z TEXT DEFAULT 'hi');
+            CREATE TABLE t6(id INTEGER PRIMARY KEY AUTOINCREMENT, x INT ,y NUMBER DEFAULT 4.3, z TEXT DEFAULT 'hi');
             INSERT INTO t6 DEFAULT VALUES;
             SELECT * FROM t6;
     ]], {
diff --git a/test/sql-tap/keyword1.test.lua b/test/sql-tap/keyword1.test.lua
index 9c524d607..cac584bf8 100755
--- a/test/sql-tap/keyword1.test.lua
+++ b/test/sql-tap/keyword1.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(176)
+test:plan(177)
 
 --!./tcltestrunner.lua
 -- 2009 January 29
@@ -163,6 +163,7 @@ local bannedkws = {
 	"localtime",
 	"localtimestamp",
 	"loop",
+	"number",
 	"out",
 	"over",
 	"partition",
diff --git a/test/sql-tap/numcast.test.lua b/test/sql-tap/numcast.test.lua
index 8855be76e..9f7248577 100755
--- a/test/sql-tap/numcast.test.lua
+++ b/test/sql-tap/numcast.test.lua
@@ -49,7 +49,7 @@ for _, enc in ipairs({"utf8"}) do
         test:do_test(
             string.format("numcast-%s.%s.1", enc, idx),
             function()
-                return test:execsql("SELECT CAST("..str.." AS real)")
+                return test:execsql("SELECT CAST("..str.." AS NUMBER)")
             end, {
                 rval
             })
diff --git a/test/sql-tap/pragma.test.lua b/test/sql-tap/pragma.test.lua
index 8221d36e6..b20bd724d 100755
--- a/test/sql-tap/pragma.test.lua
+++ b/test/sql-tap/pragma.test.lua
@@ -107,7 +107,7 @@ test:do_test(
 test:execsql(
 	[[
 		DROP TABLE IF EXISTS gh3733;
-		CREATE TABLE gh3733(id INT primary key, f float);
+		CREATE TABLE gh3733(id INT primary key, f NUMBER);
 		INSERT INTO gh3733 VALUES(1, 0.1), (2, 0.2), (3, 0.3);
 		CREATE INDEX IDX ON GH3733 (id);
 	]])
diff --git a/test/sql-tap/select3.test.lua b/test/sql-tap/select3.test.lua
index 2807d42c6..b51a9e8b6 100755
--- a/test/sql-tap/select3.test.lua
+++ b/test/sql-tap/select3.test.lua
@@ -367,18 +367,18 @@ test:do_execsql_test("select3-7.2", [[
   -- </select3-7.2>
 })
 
--- If a table column is of type REAL but we are storing integer values
+-- If a table column is of typeNUMBER but we are storing integer values
 -- in it, the values are stored as integers to take up less space.  The
--- values are converted by to REAL as they are read out of the table.
+-- values are converted by toNUMBER as they are read out of the table.
 -- Make sure the GROUP BY clause does this conversion correctly.
 -- Ticket #2251.
 --
 test:do_execsql_test("select3-8.1", [[
   DROP TABLE IF EXISTS A;
   CREATE TABLE A (
-    A1 DOUBLE,
+    A1 NUMBER,
     A2 TEXT,
-    A3 DOUBLE,
+    A3 NUMBER,
     id int primary key
   );
   INSERT INTO A VALUES(39136,'ABC',1201900000, 1);
diff --git a/test/sql-tap/select4.test.lua b/test/sql-tap/select4.test.lua
index 1c0804b8e..23cf1bf1b 100755
--- a/test/sql-tap/select4.test.lua
+++ b/test/sql-tap/select4.test.lua
@@ -759,7 +759,7 @@ test:do_test(
     "select4-8.1",
     function()
         test:execsql [[
-            CREATE TABLE t3(a text primary key, b float, c text);
+            CREATE TABLE t3(a text primary key, b NUMBER, c text);
             START TRANSACTION;
             INSERT INTO t3 VALUES(1, 1.1, '1.1');
             INSERT INTO t3 VALUES(2, 1.10, '1.10');
diff --git a/test/sql-tap/select7.test.lua b/test/sql-tap/select7.test.lua
index ab4c766ab..fec5d7a41 100755
--- a/test/sql-tap/select7.test.lua
+++ b/test/sql-tap/select7.test.lua
@@ -188,7 +188,7 @@ test:do_catchsql_test(
 test:do_execsql_test(
     "select7-7.1",
     [[
-        CREATE TABLE t3(a REAL primary key);
+        CREATE TABLE t3(a NUMBER primary key);
         INSERT INTO t3 VALUES(44.0);
         INSERT INTO t3 VALUES(56.0);
     ]], {
@@ -211,7 +211,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "select7-7.3",
     [[
-        CREATE TABLE t4(a REAL primary key);
+        CREATE TABLE t4(a NUMBER primary key);
         INSERT INTO t4 VALUES( 2.0 );
         INSERT INTO t4 VALUES( 3.0 );
     ]], {
diff --git a/test/sql-tap/sort.test.lua b/test/sql-tap/sort.test.lua
index a84c549cc..e15641415 100755
--- a/test/sql-tap/sort.test.lua
+++ b/test/sql-tap/sort.test.lua
@@ -31,7 +31,7 @@ test:do_test(
                v varchar(10),
                log int,
                roman varchar(10),
-               flt real
+               flt NUMBER
             );
             INSERT INTO t1 VALUES(1,'one',0,'I',3.141592653);
             INSERT INTO t1 VALUES(2,'two',1,'II',2.15);
@@ -633,7 +633,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "sort-8.1",
     [[
-        CREATE TABLE t5(a real, b text PRIMARY KEY);
+        CREATE TABLE t5(a NUMBER, b text PRIMARY KEY);
         INSERT INTO t5 VALUES(100,'A1');
         INSERT INTO t5 VALUES(100.0,'A2');
         SELECT * FROM t5 ORDER BY a, b;
diff --git a/test/sql-tap/table.test.lua b/test/sql-tap/table.test.lua
index a539f5222..40d7d6b7e 100755
--- a/test/sql-tap/table.test.lua
+++ b/test/sql-tap/table.test.lua
@@ -892,7 +892,7 @@ test:do_execsql_test(
     [[
         CREATE TABLE t7(
            a integer primary key,
-           b FLOAT,
+           b NUMBER,
            c VARCHAR(8),
            d VARCHAR(9),
            e SCALAR,
diff --git a/test/sql-tap/tkt-3998683a16.test.lua b/test/sql-tap/tkt-3998683a16.test.lua
index 631a977e3..885dcf5cd 100755
--- a/test/sql-tap/tkt-3998683a16.test.lua
+++ b/test/sql-tap/tkt-3998683a16.test.lua
@@ -25,7 +25,7 @@ test:do_test(
     "tkt-3998683a16.1",
     function()
         return test:execsql [[
-            CREATE TABLE t1(x  INT primary key, y REAL);
+            CREATE TABLE t1(x  INT primary key, y NUMBER);
             INSERT INTO t1 VALUES(1, '1.0');
             INSERT INTO t1 VALUES(2, '.125');
             INSERT INTO t1 VALUES(3, '123.');
diff --git a/test/sql-tap/tkt-91e2e8ba6f.test.lua b/test/sql-tap/tkt-91e2e8ba6f.test.lua
index 22f968f86..7622f7536 100755
--- a/test/sql-tap/tkt-91e2e8ba6f.test.lua
+++ b/test/sql-tap/tkt-91e2e8ba6f.test.lua
@@ -21,7 +21,7 @@ testprefix = "tkt-91e2e8ba6f"
 test:do_execsql_test(
     1.1,
     [[
-        CREATE TABLE t1(x INTEGER PRIMARY KEY, y REAL);
+        CREATE TABLE t1(x INTEGER PRIMARY KEY, y NUMBER);
         INSERT INTO t1 VALUES(11, 11);
     ]], {
         -- <1.1>
diff --git a/test/sql-tap/tkt-9a8b09f8e6.test.lua b/test/sql-tap/tkt-9a8b09f8e6.test.lua
index c80e3ae78..db0881caa 100755
--- a/test/sql-tap/tkt-9a8b09f8e6.test.lua
+++ b/test/sql-tap/tkt-9a8b09f8e6.test.lua
@@ -50,7 +50,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     1.3,
     [[
-        CREATE TABLE t3(x REAL primary key);
+        CREATE TABLE t3(x NUMBER primary key);
         INSERT INTO t3 VALUES(1.0);
     ]], {
         -- <1.3>
@@ -61,7 +61,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     1.4,
     [[
-        CREATE TABLE t4(x REAL primary key);
+        CREATE TABLE t4(x NUMBER primary key);
         INSERT INTO t4 VALUES(1.11);
     ]], {
         -- <1.4>
diff --git a/test/sql-tap/tkt1444.test.lua b/test/sql-tap/tkt1444.test.lua
index 563bf3c07..82a5ded25 100755
--- a/test/sql-tap/tkt1444.test.lua
+++ b/test/sql-tap/tkt1444.test.lua
@@ -28,7 +28,7 @@ test:plan(4)
 test:do_execsql_test(
     "tkt1444-1.1",
     [[
-        CREATE TABLE DemoTable (id  INT primary key, x INTEGER, TextKey TEXT, DKey FLOAT);
+        CREATE TABLE DemoTable (id  INT primary key, x INTEGER, TextKey TEXT, DKey NUMBER);
         CREATE INDEX DemoTableIdx ON DemoTable (TextKey);
         INSERT INTO DemoTable VALUES(1, 9,8,7);
         INSERT INTO DemoTable VALUES(2, 1,2,3);
diff --git a/test/sql-tap/tkt2192.test.lua b/test/sql-tap/tkt2192.test.lua
index 17b5d46d1..52309ff2b 100755
--- a/test/sql-tap/tkt2192.test.lua
+++ b/test/sql-tap/tkt2192.test.lua
@@ -33,7 +33,7 @@ test:do_execsql_test(
         -- Raw data (RBS) --------
 
         create table records (
-          date_t        real primary key,
+          date_t        NUMBER primary key,
           type          text,
           description   text,
           value         integer,
diff --git a/test/sql-tap/transitive1.test.lua b/test/sql-tap/transitive1.test.lua
index bed1d0442..e96056580 100755
--- a/test/sql-tap/transitive1.test.lua
+++ b/test/sql-tap/transitive1.test.lua
@@ -228,7 +228,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "transitive1-410",
     [[
-        CREATE TABLE bookmark ( idBookmark integer primary key, idFile integer, timeInSeconds double, totalTimeInSeconds double, thumbNailImage text, player text, playerState text, type integer);
+        CREATE TABLE bookmark ( idBookmark integer primary key, idFile integer, timeInSeconds NUMBER, totalTimeInSeconds NUMBER, thumbNailImage text, player text, playerState text, type integer);
         CREATE TABLE path ( idPath integer primary key, strPath text, strContent text, strScraper text, strHash text, scanRecursive integer, useFolderNames  INT , strSettings text, noUpdate  INT , exclude  INT , dateAdded text);
         INSERT INTO path VALUES(1,'/tmp/tvshows/','tvshows','metadata.tvdb.com','989B1CE5680A14F5F86123F751169B49',0,0,'<settings><setting id="absolutenumber" value="false" /><setting id="dvdorder" value="false" /><setting id="fanart" value="true" /><setting id="language" value="en" /></settings>',0,0,NULL);
         INSERT INTO path VALUES(2,'/tmp/tvshows/The.Big.Bang.Theory/','','','85E1DAAB2F5FF6EAE8AEDF1B5C882D1E',NULL,NULL,NULL,NULL,NULL,'2013-10-23 18:58:43');
diff --git a/test/sql-tap/trigger5.test.lua b/test/sql-tap/trigger5.test.lua
index f71649925..310e3591e 100755
--- a/test/sql-tap/trigger5.test.lua
+++ b/test/sql-tap/trigger5.test.lua
@@ -21,7 +21,7 @@ test:do_execsql_test(
     [[
         CREATE TABLE Item(
            a integer PRIMARY KEY NOT NULL ,
-           b double NULL ,
+           b NUMBER NULL ,
            c int NOT NULL DEFAULT 0
         );
         CREATE TABLE Undo(id INTEGER PRIMARY KEY, UndoAction TEXT);
diff --git a/test/sql-tap/types.test.lua b/test/sql-tap/types.test.lua
index 1cbb577ac..2306433fa 100755
--- a/test/sql-tap/types.test.lua
+++ b/test/sql-tap/types.test.lua
@@ -166,7 +166,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "types-2.2.1",
     [[
-        CREATE TABLE t2(id  INT primary key, a float);
+        CREATE TABLE t2(id  INT primary key, a NUMBER);
         INSERT INTO t2 VALUES(1, 0.0);
         INSERT INTO t2 VALUES(2, 12345.678);
         INSERT INTO t2 VALUES(3, -12345.678);
diff --git a/test/sql-tap/where7.test.lua b/test/sql-tap/where7.test.lua
index ecd0d247d..70209545d 100755
--- a/test/sql-tap/where7.test.lua
+++ b/test/sql-tap/where7.test.lua
@@ -332,7 +332,7 @@ test:do_test(
     "where7-2.1",
     function()
         return test:execsql [[
-            CREATE TABLE t2(a INTEGER PRIMARY KEY,b INT,c INT,d REAL,e REAL,f TEXT,g TEXT);
+            CREATE TABLE t2(a INTEGER PRIMARY KEY,b INT,c INT,d NUMBER,e NUMBER,f TEXT,g TEXT);
             INSERT INTO t2 VALUES(1,11,1001,1.001,100.1,'bcdefghij','yxwvuts');
             INSERT INTO t2 VALUES(2,22,1001,2.002,100.1,'cdefghijk','yxwvuts');
             INSERT INTO t2 VALUES(3,33,1001,3.0029999999999997,100.1,'defghijkl','xwvutsr');
@@ -439,7 +439,7 @@ test:do_test(
             CREATE INDEX t2e ON t2(e);
             CREATE INDEX t2f ON t2(f);
             CREATE INDEX t2g ON t2(g);
-            CREATE TABLE t3(a INTEGER PRIMARY KEY,b INT,c INT,d REAL,e REAL,f TEXT,g TEXT);
+            CREATE TABLE t3(a INTEGER PRIMARY KEY,b INT,c INT,d NUMBER,e NUMBER,f TEXT,g TEXT);
             INSERT INTO t3 SELECT * FROM t2;
             CREATE INDEX t3b ON t3(b,c);
             CREATE INDEX t3c ON t3(c,e);
diff --git a/test/sql-tap/whereA.test.lua b/test/sql-tap/whereA.test.lua
index 2c8cb45f9..b82575f5b 100755
--- a/test/sql-tap/whereA.test.lua
+++ b/test/sql-tap/whereA.test.lua
@@ -23,7 +23,7 @@ test:do_test(
     "whereA-1.1",
     function()
         return test:execsql [[
-            CREATE TABLE t1(a INTEGER PRIMARY KEY, b REAL UNIQUE, c TEXT);
+            CREATE TABLE t1(a INTEGER PRIMARY KEY, b NUMBER UNIQUE, c TEXT);
             INSERT INTO t1 VALUES(1,2,'3');
             INSERT INTO t1 values(2,55,'world');
             INSERT INTO t1 VALUES(3,4.53,NULL);
diff --git a/test/sql-tap/whereB.test.lua b/test/sql-tap/whereB.test.lua
index f75d0772c..d98645fdc 100755
--- a/test/sql-tap/whereB.test.lua
+++ b/test/sql-tap/whereB.test.lua
@@ -321,7 +321,7 @@ test:do_execsql_test(
         CREATE TABLE t1(x  INT primary key, y SCALAR);    -- affinity of t1.y is NONE
         INSERT INTO t1 VALUES(1,'99');
 
-        CREATE TABLE t2(a  INT primary key, b FLOAT);  -- affinity of t2.b is NUMERIC
+        CREATE TABLE t2(a  INT primary key, b NUMBER);  -- affinity of t2.b is NUMERIC
         CREATE INDEX t2b ON t2(b);
         INSERT INTO t2 VALUES(2,99);
 
@@ -521,7 +521,7 @@ test:do_execsql_test(
         CREATE TABLE t1(x  INT primary key, y SCALAR);    -- affinity of t1.y is NONE
         INSERT INTO t1 VALUES(1,'99');
 
-        CREATE TABLE t2(a  INT primary key, b FLOAT);  -- affinity of t2.b is REAL
+        CREATE TABLE t2(a  INT primary key, b NUMBER);  -- affinity of t2.b is REAL
         CREATE INDEX t2b ON t2(b);
         INSERT INTO t2 VALUES(2,99.0);
 
@@ -618,7 +618,7 @@ test:do_execsql_test(
         DROP TABLE t1;
         DROP TABLE t2;
 
-        CREATE TABLE t1(x  INT primary key, y FLOAT);  -- affinity of t1.y is NUMERIC
+        CREATE TABLE t1(x  INT primary key, y NUMBER);  -- affinity of t1.y is NUMERIC
         INSERT INTO t1 VALUES(1,99);
 
         CREATE TABLE t2(a  INT primary key, b SCALAR);  -- affinity of t2.b is NONE
@@ -818,7 +818,7 @@ test:do_execsql_test(
         DROP TABLE t1;
         DROP TABLE t2;
 
-        CREATE TABLE t1(x  INT primary key, y FLOAT);  -- affinity of t1.y is REAL
+        CREATE TABLE t1(x  INT primary key, y NUMBER);  -- affinity of t1.y is REAL
         INSERT INTO t1 VALUES(1,99.0);
 
         CREATE TABLE t2(a  INT primary key, b SCALAR);  -- affinity of t2.b is NONE
diff --git a/test/sql/bind.result b/test/sql/bind.result
index 3f677b9c5..cd0fcc0b1 100644
--- a/test/sql/bind.result
+++ b/test/sql/bind.result
@@ -4,7 +4,7 @@ netbox = require('net.box')
 test_run = require('test_run').new()
 ---
 ...
-box.execute('CREATE TABLE test (id INT PRIMARY KEY, a FLOAT, b TEXT)')
+box.execute('CREATE TABLE test (id INT PRIMARY KEY, a NUMBER, b TEXT)')
 ---
 - row_count: 1
 ...
diff --git a/test/sql/bind.test.lua b/test/sql/bind.test.lua
index 3e0eed29a..f311a0a71 100644
--- a/test/sql/bind.test.lua
+++ b/test/sql/bind.test.lua
@@ -1,7 +1,7 @@
 netbox = require('net.box')
 test_run = require('test_run').new()
 
-box.execute('CREATE TABLE test (id INT PRIMARY KEY, a FLOAT, b TEXT)')
+box.execute('CREATE TABLE test (id INT PRIMARY KEY, a NUMBER, b TEXT)')
 box.space.TEST:replace{1, 2, '3'}
 box.space.TEST:replace{7, 8.5, '9'}
 box.space.TEST:replace{10, 11, box.NULL}
diff --git a/test/sql/checks.result b/test/sql/checks.result
index 5279ae08d..b20514993 100644
--- a/test/sql/checks.result
+++ b/test/sql/checks.result
@@ -116,7 +116,7 @@ box.space._space:delete({513})
 - [513, 1, 'test', 'memtx', 0, {'checks': [{'expr': 'X>5'}]}, [{'name': 'X', 'type': 'unsigned'}]]
 ...
 -- Create table with checks in sql.
-box.execute("CREATE TABLE t1(x INTEGER CONSTRAINT ONE CHECK( x<5 ), y REAL CONSTRAINT TWO CHECK( y>x ), z INTEGER PRIMARY KEY);")
+box.execute("CREATE TABLE t1(x INTEGER CONSTRAINT ONE CHECK( x<5 ), y NUMBER CONSTRAINT TWO CHECK( y>x ), z INTEGER PRIMARY KEY);")
 ---
 - row_count: 1
 ...
@@ -153,7 +153,7 @@ box.execute("DROP TABLE t1")
 - row_count: 1
 ...
 -- Test space creation rollback on spell error in ck constraint.
-box.execute("CREATE TABLE first (id FLOAT PRIMARY KEY CHECK(id < 5), a INT CONSTRAINT ONE CHECK(a >< 5));")
+box.execute("CREATE TABLE first (id NUMBER PRIMARY KEY CHECK(id < 5), a INT CONSTRAINT ONE CHECK(a >< 5));")
 ---
 - error: Syntax error near '<'
 ...
diff --git a/test/sql/checks.test.lua b/test/sql/checks.test.lua
index cacba597c..cde213f8b 100644
--- a/test/sql/checks.test.lua
+++ b/test/sql/checks.test.lua
@@ -46,7 +46,7 @@ box.space._ck_constraint:delete({513, 'CK_CONSTRAINT_01'})
 box.space._space:delete({513})
 
 -- Create table with checks in sql.
-box.execute("CREATE TABLE t1(x INTEGER CONSTRAINT ONE CHECK( x<5 ), y REAL CONSTRAINT TWO CHECK( y>x ), z INTEGER PRIMARY KEY);")
+box.execute("CREATE TABLE t1(x INTEGER CONSTRAINT ONE CHECK( x<5 ), y NUMBER CONSTRAINT TWO CHECK( y>x ), z INTEGER PRIMARY KEY);")
 box.space._ck_constraint:count()
 box.execute("INSERT INTO t1 VALUES (7, 1, 1)")
 box.space.T1:insert({7, 1, 1})
@@ -57,7 +57,7 @@ box.space.T1:update({1}, {{'+', 1, 5}})
 box.execute("DROP TABLE t1")
 
 -- Test space creation rollback on spell error in ck constraint.
-box.execute("CREATE TABLE first (id FLOAT PRIMARY KEY CHECK(id < 5), a INT CONSTRAINT ONE CHECK(a >< 5));")
+box.execute("CREATE TABLE first (id NUMBER PRIMARY KEY CHECK(id < 5), a INT CONSTRAINT ONE CHECK(a >< 5));")
 box.space.FIRST == nil
 box.space._ck_constraint:count() == 0
 
diff --git a/test/sql/drop-index.result b/test/sql/drop-index.result
index 1104b5f67..e8eb642b3 100644
--- a/test/sql/drop-index.result
+++ b/test/sql/drop-index.result
@@ -10,7 +10,7 @@ box.execute('pragma sql_default_engine=\''..engine..'\'')
 ...
 -- box.cfg()
 -- create space
-box.execute("CREATE TABLE zzoobar (c1 FLOAT, c2 INT PRIMARY KEY, c3 TEXT, c4 FLOAT)")
+box.execute("CREATE TABLE zzoobar (c1 NUMBER, c2 INT PRIMARY KEY, c3 TEXT, c4 NUMBER)")
 ---
 - row_count: 1
 ...
diff --git a/test/sql/drop-index.test.lua b/test/sql/drop-index.test.lua
index 9ce3da0c9..8cd86ee94 100644
--- a/test/sql/drop-index.test.lua
+++ b/test/sql/drop-index.test.lua
@@ -5,7 +5,7 @@ box.execute('pragma sql_default_engine=\''..engine..'\'')
 -- box.cfg()
 
 -- create space
-box.execute("CREATE TABLE zzoobar (c1 FLOAT, c2 INT PRIMARY KEY, c3 TEXT, c4 FLOAT)")
+box.execute("CREATE TABLE zzoobar (c1 NUMBER, c2 INT PRIMARY KEY, c3 TEXT, c4 NUMBER)")
 
 box.execute("CREATE UNIQUE INDEX zoobar2 ON zzoobar(c1, c4)")
 box.execute("CREATE        INDEX zoobar3 ON zzoobar(c3)")
diff --git a/test/sql/errinj.result b/test/sql/errinj.result
index 8846e5ee8..cb15a8359 100644
--- a/test/sql/errinj.result
+++ b/test/sql/errinj.result
@@ -58,7 +58,7 @@ box.execute('DROP TABLE t4')
 ---
 - row_count: 1
 ...
-box.execute('create table test (id int primary key, a float, b text)')
+box.execute('create table test (id int primary key, a NUMBER, b text)')
 ---
 - row_count: 1
 ...
@@ -306,7 +306,7 @@ box.execute("DROP TABLE t2;")
 -- Tests which are aimed at verifying work of commit/rollback
 -- triggers on _fk_constraint space.
 --
-box.execute("CREATE TABLE t3 (id FLOAT PRIMARY KEY, a INT REFERENCES t3, b INT UNIQUE);")
+box.execute("CREATE TABLE t3 (id NUMBER PRIMARY KEY, a INT REFERENCES t3, b INT UNIQUE);")
 ---
 - row_count: 1
 ...
diff --git a/test/sql/errinj.test.lua b/test/sql/errinj.test.lua
index 48b80a443..16358c505 100644
--- a/test/sql/errinj.test.lua
+++ b/test/sql/errinj.test.lua
@@ -18,7 +18,7 @@ errinj.set('ERRINJ_MEMTX_DELAY_GC', false)
 errinj.set('ERRINJ_TUPLE_FORMAT_COUNT', -1)
 box.execute('DROP TABLE t4')
 
-box.execute('create table test (id int primary key, a float, b text)')
+box.execute('create table test (id int primary key, a NUMBER, b text)')
 box.schema.user.grant('guest','read,write,execute', 'universe')
 cn = remote.connect(box.cfg.listen)
 cn:ping()
@@ -95,7 +95,7 @@ box.execute("DROP TABLE t2;")
 -- Tests which are aimed at verifying work of commit/rollback
 -- triggers on _fk_constraint space.
 --
-box.execute("CREATE TABLE t3 (id FLOAT PRIMARY KEY, a INT REFERENCES t3, b INT UNIQUE);")
+box.execute("CREATE TABLE t3 (id NUMBER PRIMARY KEY, a INT REFERENCES t3, b INT UNIQUE);")
 t = box.space._fk_constraint:select{}[1]:totable()
 errinj = box.error.injection
 errinj.set("ERRINJ_WAL_IO", true)
diff --git a/test/sql/gh-2929-primary-key.result b/test/sql/gh-2929-primary-key.result
index abb38fb86..815b16e0b 100644
--- a/test/sql/gh-2929-primary-key.result
+++ b/test/sql/gh-2929-primary-key.result
@@ -22,15 +22,15 @@ box.execute("CREATE TABLE t2(a INT UNIQUE, b INT)")
 ---
 - error: 'Failed to create space ''T2'': PRIMARY KEY missing'
 ...
-box.execute("CREATE TABLE t3(a FLOAT)")
+box.execute("CREATE TABLE t3(a NUMBER)")
 ---
 - error: 'Failed to create space ''T3'': PRIMARY KEY missing'
 ...
-box.execute("CREATE TABLE t4(a FLOAT, b TEXT)")
+box.execute("CREATE TABLE t4(a NUMBER, b TEXT)")
 ---
 - error: 'Failed to create space ''T4'': PRIMARY KEY missing'
 ...
-box.execute("CREATE TABLE t5(a FLOAT, b FLOAT UNIQUE)")
+box.execute("CREATE TABLE t5(a NUMBER, b NUMBER UNIQUE)")
 ---
 - error: 'Failed to create space ''T5'': PRIMARY KEY missing'
 ...
diff --git a/test/sql/gh-2929-primary-key.test.lua b/test/sql/gh-2929-primary-key.test.lua
index 870e65abc..9cc6cd51e 100644
--- a/test/sql/gh-2929-primary-key.test.lua
+++ b/test/sql/gh-2929-primary-key.test.lua
@@ -11,9 +11,9 @@ box.cfg{}
 box.execute("CREATE TABLE t1(a INT PRIMARY KEY, b INT UNIQUE)")
 box.execute("CREATE TABLE t2(a INT UNIQUE, b INT)")
 
-box.execute("CREATE TABLE t3(a FLOAT)")
-box.execute("CREATE TABLE t4(a FLOAT, b TEXT)")
-box.execute("CREATE TABLE t5(a FLOAT, b FLOAT UNIQUE)")
+box.execute("CREATE TABLE t3(a NUMBER)")
+box.execute("CREATE TABLE t4(a NUMBER, b TEXT)")
+box.execute("CREATE TABLE t5(a NUMBER, b NUMBER UNIQUE)")
 
 box.execute("DROP TABLE t1")
 
diff --git a/test/sql/gh2251-multiple-update.result b/test/sql/gh2251-multiple-update.result
index d685ddbe4..42ebf7f55 100644
--- a/test/sql/gh2251-multiple-update.result
+++ b/test/sql/gh2251-multiple-update.result
@@ -35,7 +35,7 @@ box.execute("SELECT e FROM t1")
   - [7]
   - [8]
 ...
-box.execute("CREATE TABLE t2(a integer primary key, b INT UNIQUE, c FLOAT, d FLOAT, e INT,  UNIQUE(c,d));")
+box.execute("CREATE TABLE t2(a integer primary key, b INT UNIQUE, c NUMBER, d NUMBER, e INT,  UNIQUE(c,d));")
 ---
 - row_count: 1
 ...
diff --git a/test/sql/gh2251-multiple-update.test.lua b/test/sql/gh2251-multiple-update.test.lua
index a852c4bb4..4d5509606 100644
--- a/test/sql/gh2251-multiple-update.test.lua
+++ b/test/sql/gh2251-multiple-update.test.lua
@@ -13,7 +13,7 @@ box.execute("UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1);")
 
 box.execute("SELECT e FROM t1")
 
-box.execute("CREATE TABLE t2(a integer primary key, b INT UNIQUE, c FLOAT, d FLOAT, e INT,  UNIQUE(c,d));")
+box.execute("CREATE TABLE t2(a integer primary key, b INT UNIQUE, c NUMBER, d NUMBER, e INT,  UNIQUE(c,d));")
 box.execute("INSERT INTO t2 VALUES(1,2,3,4,5);")
 box.execute("INSERT INTO t2 VALUES(2,3,4,4,6);")
 
diff --git a/test/sql/integer-overflow.result b/test/sql/integer-overflow.result
index 528e7a6d6..a9a90f539 100644
--- a/test/sql/integer-overflow.result
+++ b/test/sql/integer-overflow.result
@@ -143,7 +143,7 @@ box.space.T:drop()
 -- Make sure that integers stored in NUMBER field are converted
 -- to floating point properly.
 --
-box.execute("CREATE TABLE t(id INT PRIMARY KEY, a FLOAT);")
+box.execute("CREATE TABLE t(id INT PRIMARY KEY, a NUMBER);")
 ---
 - row_count: 1
 ...
diff --git a/test/sql/integer-overflow.test.lua b/test/sql/integer-overflow.test.lua
index d5635d5af..1b3e8cec1 100644
--- a/test/sql/integer-overflow.test.lua
+++ b/test/sql/integer-overflow.test.lua
@@ -46,7 +46,7 @@ box.space.T:drop()
 -- Make sure that integers stored in NUMBER field are converted
 -- to floating point properly.
 --
-box.execute("CREATE TABLE t(id INT PRIMARY KEY, a FLOAT);")
+box.execute("CREATE TABLE t(id INT PRIMARY KEY, a NUMBER);")
 box.space.T:insert({1, 18446744073709551615ULL})
 box.space.T:insert({2, -1})
 box.execute("SELECT * FROM t;")
diff --git a/test/sql/iproto.result b/test/sql/iproto.result
index 7b3463a0d..c0d5df460 100644
--- a/test/sql/iproto.result
+++ b/test/sql/iproto.result
@@ -11,7 +11,7 @@ box.execute('pragma sql_default_engine=\''..engine..'\'')
 ---
 - row_count: 0
 ...
-box.execute('create table test (id int primary key, a float, b text)')
+box.execute('create table test (id int primary key, a NUMBER, b text)')
 ---
 - row_count: 1
 ...
diff --git a/test/sql/iproto.test.lua b/test/sql/iproto.test.lua
index 5979c58af..dd60afe79 100644
--- a/test/sql/iproto.test.lua
+++ b/test/sql/iproto.test.lua
@@ -3,7 +3,7 @@ test_run = require('test_run').new()
 engine = test_run:get_cfg('engine')
 box.execute('pragma sql_default_engine=\''..engine..'\'')
 
-box.execute('create table test (id int primary key, a float, b text)')
+box.execute('create table test (id int primary key, a NUMBER, b text)')
 space = box.space.TEST
 space:replace{1, 2, '3'}
 space:replace{4, 5, '6'}
diff --git a/test/sql/persistency.result b/test/sql/persistency.result
index 3508a22e8..fcb5d2362 100644
--- a/test/sql/persistency.result
+++ b/test/sql/persistency.result
@@ -290,7 +290,7 @@ box.execute("SELECT COUNT(*) FROM foobar WHERE bar='cacodaemon'")
 ...
 -- multi-index
 -- create space
-box.execute("CREATE TABLE barfoo (bar TEXT, foo FLOAT PRIMARY KEY)")
+box.execute("CREATE TABLE barfoo (bar TEXT, foo NUMBER PRIMARY KEY)")
 ---
 - row_count: 1
 ...
diff --git a/test/sql/persistency.test.lua b/test/sql/persistency.test.lua
index 12c949e08..196445349 100644
--- a/test/sql/persistency.test.lua
+++ b/test/sql/persistency.test.lua
@@ -41,7 +41,7 @@ box.execute("SELECT COUNT(*) FROM foobar WHERE bar='cacodaemon'")
 -- multi-index
 
 -- create space
-box.execute("CREATE TABLE barfoo (bar TEXT, foo FLOAT PRIMARY KEY)")
+box.execute("CREATE TABLE barfoo (bar TEXT, foo NUMBER PRIMARY KEY)")
 box.execute("CREATE UNIQUE INDEX barfoo2 ON barfoo(bar)")
 
 -- prepare data
diff --git a/test/sql/transition.result b/test/sql/transition.result
index 6f5e7636b..e7794742e 100644
--- a/test/sql/transition.result
+++ b/test/sql/transition.result
@@ -287,7 +287,7 @@ box.execute("SELECT COUNT(*) FROM foobar WHERE bar='cacodaemon'")
 ...
 -- multi-index
 -- create space
-box.execute("CREATE TABLE barfoo (bar TEXT, foo FLOAT PRIMARY KEY)")
+box.execute("CREATE TABLE barfoo (bar TEXT, foo NUMBER PRIMARY KEY)")
 ---
 - row_count: 1
 ...
diff --git a/test/sql/transition.test.lua b/test/sql/transition.test.lua
index c76ab93da..a05c26a76 100644
--- a/test/sql/transition.test.lua
+++ b/test/sql/transition.test.lua
@@ -40,7 +40,7 @@ box.execute("SELECT COUNT(*) FROM foobar WHERE bar='cacodaemon'")
 -- multi-index
 
 -- create space
-box.execute("CREATE TABLE barfoo (bar TEXT, foo FLOAT PRIMARY KEY)")
+box.execute("CREATE TABLE barfoo (bar TEXT, foo NUMBER PRIMARY KEY)")
 box.execute("CREATE UNIQUE INDEX barfoo2 ON barfoo(bar)")
 
 -- prepare data
diff --git a/test/sql/triggers.result b/test/sql/triggers.result
index dcb66b0b9..76e87c8f2 100644
--- a/test/sql/triggers.result
+++ b/test/sql/triggers.result
@@ -308,7 +308,7 @@ box.execute("PRAGMA sql_default_engine('memtx');")
 ---
 - row_count: 0
 ...
-box.execute("CREATE TABLE n (s0 INT PRIMARY KEY, s1 TEXT UNIQUE, s2 REAL);")
+box.execute("CREATE TABLE n (s0 INT PRIMARY KEY, s1 TEXT UNIQUE, s2 NUMBER);")
 ---
 - row_count: 1
 ...
@@ -351,7 +351,7 @@ box.execute("PRAGMA sql_default_engine('vinyl');")
 ---
 - row_count: 0
 ...
-box.execute("CREATE TABLE n (s0 INT PRIMARY KEY, s1 TEXT UNIQUE, s2 REAL);")
+box.execute("CREATE TABLE n (s0 INT PRIMARY KEY, s1 TEXT UNIQUE, s2 NUMBER);")
 ---
 - row_count: 1
 ...
diff --git a/test/sql/triggers.test.lua b/test/sql/triggers.test.lua
index f9d50b4c7..f0397dc7d 100644
--- a/test/sql/triggers.test.lua
+++ b/test/sql/triggers.test.lua
@@ -104,7 +104,7 @@ box.execute("PRAGMA sql_default_engine ('vinyl');")
 box.execute("CREATE TABLE m (s0 INT PRIMARY KEY, s1 TEXT UNIQUE);")
 box.execute("CREATE TRIGGER m1 BEFORE UPDATE ON m FOR EACH ROW BEGIN UPDATE n SET s2 = 'now'; END;")
 box.execute("PRAGMA sql_default_engine('memtx');")
-box.execute("CREATE TABLE n (s0 INT PRIMARY KEY, s1 TEXT UNIQUE, s2 REAL);")
+box.execute("CREATE TABLE n (s0 INT PRIMARY KEY, s1 TEXT UNIQUE, s2 NUMBER);")
 box.execute("INSERT INTO m VALUES (0, '0');")
 box.execute("INSERT INTO n VALUES (0, '',null);")
 box.execute("UPDATE m SET s1 = 'The Rain In Spain';")
@@ -120,7 +120,7 @@ box.execute("PRAGMA sql_default_engine ('memtx');")
 box.execute("CREATE TABLE m (s0 INT PRIMARY KEY, s1 TEXT UNIQUE);")
 box.execute("CREATE TRIGGER m1 BEFORE UPDATE ON m FOR EACH ROW BEGIN UPDATE n SET s2 = 'now'; END;")
 box.execute("PRAGMA sql_default_engine('vinyl');")
-box.execute("CREATE TABLE n (s0 INT PRIMARY KEY, s1 TEXT UNIQUE, s2 REAL);")
+box.execute("CREATE TABLE n (s0 INT PRIMARY KEY, s1 TEXT UNIQUE, s2 NUMBER);")
 box.execute("INSERT INTO m VALUES (0, '0');")
 box.execute("INSERT INTO n VALUES (0, '',null);")
 box.execute("UPDATE m SET s1 = 'The Rain In Spain';")
diff --git a/test/sql/types.result b/test/sql/types.result
index 0dc90d5a4..780a23d51 100644
--- a/test/sql/types.result
+++ b/test/sql/types.result
@@ -31,7 +31,7 @@ box.execute("CREATE TABLE t1 (id INT PRIMARY KEY, a INT, b UNIQUE);")
 ...
 -- gh-3104: real type is stored in space format.
 --
-box.execute("CREATE TABLE t1 (id TEXT PRIMARY KEY, a REAL, b INT, c TEXT, d SCALAR);")
+box.execute("CREATE TABLE t1 (id TEXT PRIMARY KEY, a NUMBER, b INT, c TEXT, d SCALAR);")
 ---
 - row_count: 1
 ...
@@ -799,7 +799,7 @@ box.execute("SELECT CAST(true AS TEXT);")
   rows:
   - ['TRUE']
 ...
-box.execute("SELECT CAST(true AS FLOAT);")
+box.execute("SELECT CAST(true AS NUMBER);")
 ---
 - error: 'Type mismatch: can not convert true to number'
 ...
@@ -1640,10 +1640,10 @@ box.space.T1:drop()
 ...
 -- Test CAST facilities.
 --
-box.execute("SELECT CAST(18446744073709551615 AS FLOAT);")
+box.execute("SELECT CAST(18446744073709551615 AS NUMBER);")
 ---
 - metadata:
-  - name: CAST(18446744073709551615 AS FLOAT)
+  - name: CAST(18446744073709551615 AS NUMBER)
     type: number
   rows:
   - [1.844674407371e+19]
diff --git a/test/sql/types.test.lua b/test/sql/types.test.lua
index 06de8c977..cd862123f 100644
--- a/test/sql/types.test.lua
+++ b/test/sql/types.test.lua
@@ -11,7 +11,7 @@ box.execute("CREATE TABLE t1 (id INT PRIMARY KEY, a INT, b UNIQUE);")
 
 -- gh-3104: real type is stored in space format.
 --
-box.execute("CREATE TABLE t1 (id TEXT PRIMARY KEY, a REAL, b INT, c TEXT, d SCALAR);")
+box.execute("CREATE TABLE t1 (id TEXT PRIMARY KEY, a NUMBER, b INT, c TEXT, d SCALAR);")
 box.space.T1:format()
 box.execute("CREATE VIEW v1 AS SELECT b + a, b - a FROM t1;")
 box.space.V1:format()
@@ -191,7 +191,7 @@ box.space.V:drop()
 --
 box.execute("SELECT CAST(true AS INTEGER);")
 box.execute("SELECT CAST(true AS TEXT);")
-box.execute("SELECT CAST(true AS FLOAT);")
+box.execute("SELECT CAST(true AS NUMBER);")
 box.execute("SELECT CAST(true AS SCALAR);")
 box.execute("SELECT CAST(1 AS BOOLEAN);")
 box.execute("SELECT CAST(1.123 AS BOOLEAN);")
@@ -377,7 +377,7 @@ box.space.T1:drop()
 
 -- Test CAST facilities.
 --
-box.execute("SELECT CAST(18446744073709551615 AS FLOAT);")
+box.execute("SELECT CAST(18446744073709551615 AS NUMBER);")
 box.execute("SELECT CAST(18446744073709551615 AS TEXT);")
 box.execute("SELECT CAST(18446744073709551615 AS SCALAR);")
 box.execute("SELECT CAST(18446744073709551615 AS BOOLEAN);")
-- 
2.15.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: add STRING alias to TEXT type
  2019-07-29 23:34 ` [tarantool-patches] [PATCH 1/2] sql: add STRING alias to TEXT type Nikita Pettik
@ 2019-07-30  7:18   ` Konstantin Osipov
  2019-07-30  7:19   ` Konstantin Osipov
  1 sibling, 0 replies; 7+ messages in thread
From: Konstantin Osipov @ 2019-07-30  7:18 UTC (permalink / raw)
  To: Nikita Pettik; +Cc: tarantool-patches

* Nikita Pettik <korablev@tarantool.org> [19/07/30 09:41]:
> TEXT type is called "string" in the original Tarantool NoSQL, so it would
> be rational to allow using the same type name in SQL.

lgtm


-- 
Konstantin Osipov, Moscow, Russia

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: add STRING alias to TEXT type
  2019-07-29 23:34 ` [tarantool-patches] [PATCH 1/2] sql: add STRING alias to TEXT type Nikita Pettik
  2019-07-30  7:18   ` [tarantool-patches] " Konstantin Osipov
@ 2019-07-30  7:19   ` Konstantin Osipov
  1 sibling, 0 replies; 7+ messages in thread
From: Konstantin Osipov @ 2019-07-30  7:19 UTC (permalink / raw)
  To: Nikita Pettik; +Cc: tarantool-patches

* Nikita Pettik <korablev@tarantool.org> [19/07/30 09:41]:
> TEXT type is called "string" in the original Tarantool NoSQL, so it would
> be rational to allow using the same type name in SQL.

BTW, there is a ticket for STRING alias, please close it.
No docbot entry is needed since Peter has not documented the data
types yet.

-- 
Konstantin Osipov, Moscow, Russia

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: rename REAL/FLOAT/DOUBLE types to NUMBER
  2019-07-29 23:34 ` [tarantool-patches] [PATCH 2/2] sql: rename REAL/FLOAT/DOUBLE types to NUMBER Nikita Pettik
@ 2019-07-30  7:21   ` Konstantin Osipov
  0 siblings, 0 replies; 7+ messages in thread
From: Konstantin Osipov @ 2019-07-30  7:21 UTC (permalink / raw)
  To: Nikita Pettik; +Cc: tarantool-patches

* Nikita Pettik <korablev@tarantool.org> [19/07/30 09:41]:
> Before this patch it was allowed to specify REAL/FLOAT/DOUBLE types
> which matched with NUMBER NoSQL type in space format. However, NUMBER is
> different from standard floating point types, since it is able to hold
> integers in range [-2^63; 2^64-1] alongside with double precision
> floating point values. Hence, to not confuse users it has been decided
> to remove support of REAL/FLOAT/DOUBLE types from SQL grammar and use
> instead original NUMBER type naming.

This is a breaking change as some people are using 2.x.
Says a lot about the maturity of 2.x, eh...

LGTM.


-- 
Konstantin Osipov, Moscow, Russia

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tarantool-patches] Re: [PATCH 0/2] Fix type aliases in SQL
  2019-07-29 23:34 [tarantool-patches] [PATCH 0/2] Fix type aliases in SQL Nikita Pettik
  2019-07-29 23:34 ` [tarantool-patches] [PATCH 1/2] sql: add STRING alias to TEXT type Nikita Pettik
  2019-07-29 23:34 ` [tarantool-patches] [PATCH 2/2] sql: rename REAL/FLOAT/DOUBLE types to NUMBER Nikita Pettik
@ 2019-07-30 14:21 ` Kirill Yukhin
  2 siblings, 0 replies; 7+ messages in thread
From: Kirill Yukhin @ 2019-07-30 14:21 UTC (permalink / raw)
  To: tarantool-patches; +Cc: kostja, Nikita Pettik

Hello,

On 30 Jul 02:34, Nikita Pettik wrote:
> Branch: https://github.com/tarantool/tarantool/tree/np/sql-type-aliases
> 
> Justification is described in commit messages, but the main
> point is to make NoSQL type system be consistent with SQL one
> at least in types naming.
> 
> The only concern I've noticed: CAST to NUMBER always results in
> coversion of integer or string literal to floating point value.
> Meanwhile, number can hold integer values. So the question is
> should CAST("integer_literal" AS NUMBER) return floating point,
> or just be no-op in this case...?
> 
> Nikita Pettik (2):
>   sql: add STRING alias to TEXT type
>   sql: rename REAL/FLOAT/DOUBLE types to NUMBER

I've checked the patchset into master.

--
Regards, Kirill Yukhin

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-07-30 14:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-29 23:34 [tarantool-patches] [PATCH 0/2] Fix type aliases in SQL Nikita Pettik
2019-07-29 23:34 ` [tarantool-patches] [PATCH 1/2] sql: add STRING alias to TEXT type Nikita Pettik
2019-07-30  7:18   ` [tarantool-patches] " Konstantin Osipov
2019-07-30  7:19   ` Konstantin Osipov
2019-07-29 23:34 ` [tarantool-patches] [PATCH 2/2] sql: rename REAL/FLOAT/DOUBLE types to NUMBER Nikita Pettik
2019-07-30  7:21   ` [tarantool-patches] " Konstantin Osipov
2019-07-30 14:21 ` [tarantool-patches] Re: [PATCH 0/2] Fix type aliases in SQL Kirill Yukhin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox