Skip to content

Commit

Permalink
Bool mixed affinity support (#88)
Browse files Browse the repository at this point in the history
mkgrgis authored Dec 27, 2023
1 parent 78406b9 commit a387b2f
Showing 43 changed files with 11,712 additions and 1,949 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -10,12 +10,12 @@
##########################################################################

MODULE_big = sqlite_fdw
OBJS = connection.o option.o deparse.o sqlite_query.o sqlite_fdw.o uuid_extension.o
OBJS = connection.o option.o deparse.o sqlite_query.o sqlite_fdw.o sqlite_data_norm.o

EXTENSION = sqlite_fdw
DATA = sqlite_fdw--1.0.sql sqlite_fdw--1.0--1.1.sql

REGRESS = extra/sqlite_fdw_post extra/float4 extra/float8 extra/int4 extra/int8 extra/numeric extra/join extra/limit extra/aggregates extra/prepare extra/select_having extra/select extra/insert extra/update extra/timestamp extra/encodings sqlite_fdw type aggregate selectfunc
REGRESS = extra/sqlite_fdw_post extra/float4 extra/float8 extra/int4 extra/int8 extra/numeric extra/join extra/limit extra/aggregates extra/prepare extra/select_having extra/select extra/insert extra/update extra/timestamp extra/encodings extra/bool extra/uuid sqlite_fdw type aggregate selectfunc
REGRESS_OPTS = --encoding=utf8

SQLITE_LIB = sqlite3
50 changes: 35 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -35,7 +35,14 @@ Features
- Support discard cached connections to foreign servers by using function `sqlite_fdw_disconnect()`, `sqlite_fdw_disconnect_all()`.
- Support Bulk `INSERT` by using `batch_size` option
- Support `INSERT`/`UPDATE` with generated column
- Support `ON CONFLICT DO NOTHING`.
- Support `ON CONFLICT DO NOTHING`
- Support mixed SQLite [data affinity](https://www.sqlite.org/datatype3.html) input and filtering (`SELECT`/`WHERE` usage) for such dataypes as
- `timestamp`: `text` and `int`,
- `uuid`: `text`(32..39) and `blob`(16),
- `bool`: `text`(1..5) and `int`.
- Support mixed SQLite [data affinity](https://www.sqlite.org/datatype3.html) output (`INSERT`/`UPDATE`) for such dataypes as
- `timestamp`: `text`(default) or `int`,
- `uuid`: `text`(36) or `blob`(16)(default).

### Pushdowning
- `WHERE` clauses are pushdowned
@@ -62,6 +69,7 @@ Features
- For `numeric` data type, `sqlite_fdw` use `sqlite3_column_double` to get value, while SQLite shell uses `sqlite3_column_text` to get value. Those 2 APIs may return different numeric value. Therefore, for `numeric` data type, the value returned from `sqlite_fdw` may different from the value returned from SQLite shell.
- `sqlite_fdw` can return implementation-dependent order for column if the column is not specified in `ORDER BY` clause.
- When the column type is `varchar array`, if the string is shorter than the declared length, values of type character will be space-padded; values of type `character varying` will simply store the shorter string.
- [String literals for `boolean`](https://www.postgresql.org/docs/current/datatype-boolean.html) (`t`, `f`, `y`, `n`, `yes`, `no`, `on`, `off` etc. case insensetive) can be readed and filtred but cannot writed, because SQLite documentation recommends only `int` affinity values (`0` or `1`) for boolean data and usually text boolean data belongs to legacy datasets.

Also see [Limitations](#limitations)

@@ -122,7 +130,6 @@ This table represents `sqlite_fdw` behaviour if in PostgreSQL foreign table colu

* **** - no support (runtime error)
* **V** - transparent transformation
* **b** - show per-bit form
* **T** - cast to text in SQLite utf-8 encoding, then to **PostgreSQL text with current encoding of database** and then transparent transformation if applicable
* **** - transparent transformation where PostgreSQL datatype is equal to SQLite affinity
* **V+** - transparent transformation if appliacable
@@ -133,14 +140,14 @@ SQLite `NULL` affinity always can be transparent converted for a nullable column

| PostgreSQL | SQLite <br> INT | SQLite <br> REAL | SQLite <br> BLOB | SQLite <br> TEXT | SQLite <br> TEXT but <br>empty|SQLite<br>nearest<br>affinity|
|-------------:|:------------:|:------------:|:------------:|:------------:|:------------:|-------------:|
| bool | V | ? | T | - || INT |
| bit(n) | V n<=64 || V | ? || INT |
| bytea | b | b || - | ? | BLOB |
| bool | V | | T | V+ || INT |
| bit(n) | V n<=64 || | || INT |
| bytea | | || - | ? | BLOB |
| date | V | V | T | V+ | `NULL` | ? |
| float4 | V+ || T | - | `NULL` | REAL |
| float8 | V+ || T | - | `NULL` | REAL |
| int2 | | ? | T | - | `NULL` | INT |
| int4 | | ? | T | - | `NULL` | INT |
| int2 | V+ | ? | T | - | `NULL` | INT |
| int4 | V+ | ? | T | - | `NULL` | INT |
| int8 || ? | T | - | `NULL` | INT |
| json | ? | ? | T | V+ | ? | TEXT |
| name | ? | ? | T | V | `NULL` | TEXT |
@@ -151,7 +158,7 @@ SQLite `NULL` affinity always can be transparent converted for a nullable column
|timestamp + tz| V | V | T | V+ | `NULL` | ? |
| uuid |||V+<br>(only<br>16 bytes)| V+ || TEXT, BLOB |
| varchar | ? | ? | T || V | TEXT |
| varbit(n) | V n<=64 || V | ? || INT |
| varbit(n) | V n<=64 || V | || INT |

### CREATE SERVER options

@@ -216,10 +223,11 @@ In OS `sqlite_fdw` works as executed code with permissions of user of PostgreSQL

- **column_type** as *string*, optional, no default

Gives preferred SQLite affinity for some PostgreSQL data types can be stored in different ways in SQLite. Default preferred SQLite affinity for this types is `text`.
Set preferred SQLite affinity for some PostgreSQL data types can be stored in different ways
in SQLite (mixed affinity case). Updated and inserted values will have this affinity. Default preferred SQLite affinity for `timestamp` and `uuid` PostgreSQL data types is `text`.

- Use `INT` value for SQLite column (epoch Unix Time) to be treated/visualized as `timestamp` in PostgreSQL.
- Use `BLOB` value for SQLite column to be treated/visualized as `uuid` in PostgreSQL.
- Use `BLOB` value for SQLite column to be treated/visualized as `uuid` in PostgreSQL 14+.

- **key** as *boolean*, optional, default *false*

@@ -305,7 +313,7 @@ Following SQL isn't correct for SQLite: `Error: duplicate column name: a`, but i
);
```
Following SQLs is correct for both SQLite and PostgreSQL because there is no column
names with ASCII base latin letters *only*.
with names composed from ASCII base latin letters *only*.

```sql
CREATE TABLE T_кир (
@@ -331,6 +339,19 @@ For SQLite there is no difference between
SELECT * FROM "T"; -- №4
```
For PostgreSQL the query with comment `№4` is independend query to table `T`, not to table `t` as other queries.
Please note this table name composed from ASCII base latin letters *only*. This is not applicable for other
alphabet systems or mixed names. This is because `toLower` operation in PostgreSQL is Unicode opration but
ASCII only operation in SQLite, hence other characters will not be changed.

```sql
SELECT * FROM т; -- №5
SELECT * FROM Т; -- №6
SELECT * FROM "т"; -- №7
SELECT * FROM "Т"; -- №8
```
In this case for PostgreSQL the query with comment `№8` is independend query to table `Т`, not to table `т`
as other queries. But for SQLite the queries with comments `№6` and `№8` belongs to table `Т`, and the queries with
comments `№5` and `№7` belongs to table `т`.

If there is

@@ -521,7 +542,7 @@ Limitations
### UUID values
- `sqlite_fdw` UUID values support exists only for `uuid` columns in foreign table. SQLite documentation recommends to store UUID as value with both `blob` and `text` [affinity](https://www.sqlite.org/datatype3.html). `sqlite_fdw` can pushdown both reading and filtering both `text` and `blob` values.
- Expected affinity of UUID value in SQLite table determined by `column_type` option of the column
for `INSERT` and `UPDATE` commands.
for `INSERT` and `UPDATE` commands. In PostgreSQL 14- only `text` data affinity is availlable, PostgreSQL 14+ supports also `blob` data affinity.

### bit and varbit support
- `sqlite_fdw` PostgreSQL `bit`/`varbit` values support based on `int` SQLite data affinity, because there is no per bit operations for SQLite `blob` affinity data. Maximum SQLite `int` affinity value is 8 bytes length, hence maximum `bit`/`varbit` values length is 64 bits.
@@ -615,9 +636,8 @@ Useful links
License
-------
Copyright (c) 2018, TOSHIBA CORPORATION
Copyright (c) 2011 - 2016, EnterpriseDB Corporation
* Copyright © 2018, TOSHIBA CORPORATION
* Copyright © 2011 - 2016, EnterpriseDB Corporation
Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.
12 changes: 1 addition & 11 deletions connection.c
Original file line number Diff line number Diff line change
@@ -220,17 +220,7 @@ sqlite_open_db(const char *dbpath)
/* add included inner SQLite functions from separate c file
* for using in data unifying during deparsing
*/
rc = sqlite_fdw_data_norm_functs_init(conn);
if (rc != SQLITE_OK)
{
char *perr = pstrdup(err);

sqlite3_free(err);
sqlite3_close(conn);
ereport(ERROR,
(errcode(ERRCODE_FDW_UNABLE_TO_ESTABLISH_CONNECTION),
errmsg("failed to create UUID support function for SQLite DB. rc=%d err=%s", rc, perr)));
}
sqlite_fdw_data_norm_functs_init(conn);
return conn;
}

33 changes: 18 additions & 15 deletions deparse.c
Original file line number Diff line number Diff line change
@@ -613,7 +613,7 @@ sqlite_foreign_expr_walker(Node *node,
|| strcmp(opername, "round") == 0
|| strcmp(opername, "rtrim") == 0
|| strcmp(opername, "substr") == 0
|| strcmp(opername, "mod") == 0))
|| strcmp(opername, "mod") == 0 ))
{
return false;
}
@@ -622,7 +622,6 @@ sqlite_foreign_expr_walker(Node *node,
glob_cxt, &inner_cxt, case_arg_cxt))
return false;


/*
* If function's input collation is not derived from a foreign
* Var, it can't be sent to remote.
@@ -675,7 +674,7 @@ sqlite_foreign_expr_walker(Node *node,
ReleaseSysCache(tuple);

/*
* Factorial (!) and Bitwise XOR (^), (#)
* Factorial (!) and Bitwise XOR (^), (#)
* cannot be pushed down to SQLite
* Full list see in https://www.postgresql.org/docs/current/functions-bitstring.html
* ILIKE cannot be pushed down to SQLite
@@ -2082,29 +2081,33 @@ sqlite_deparse_column_ref(StringInfo buf, int varno, int varattno, PlannerInfo *
colname = get_attname(rte->relid, varattno);
#endif
pg_atttyp = get_atttype(rte->relid, varattno);

/* PostgreSQL data types with possible mixed affinity SQLite base we should
* normalize to preferred form in SQLite before transfer to PostgreSQL.
* Recommended form for normalisation is someone from 1<->1 with PostgreSQL
* internal storage, hence usually this will not original text data.
*/
if (pg_atttyp == UUIDOID && !dml_context )
if (!dml_context && pg_atttyp == BOOLOID)
{
elog(DEBUG2, "UUID unification for \"%s\"", colname);
/* Please remove to UNHEX and deattach uuid_extension.c after SQLite 3.41+ support */
appendStringInfoString(buf, "coalesce(sqlite_fdw_uuid_blob(");
elog(DEBUG2, "boolean unification for \"%s\"", colname);
appendStringInfoString(buf, "sqlite_fdw_bool(");
if (qualify_col)
ADD_REL_QUALIFIER(buf, varno);
appendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));
appendStringInfoString(buf, "),");
appendStringInfoString(buf, ")");
}
else if (!dml_context && pg_atttyp == UUIDOID)
{
elog(DEBUG2, "UUID unification for \"%s\"", colname);
appendStringInfoString(buf, "sqlite_fdw_uuid_blob(");
if (qualify_col)
ADD_REL_QUALIFIER(buf, varno);
appendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));
appendStringInfoString(buf, ")");
}
else
else
{
elog(DEBUG3, "column name without data unification = \"%s\"", colname);
elog(DEBUG4, "column name without data unification = \"%s\"", colname);
if (qualify_col)
ADD_REL_QUALIFIER(buf, varno);
appendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));
@@ -2443,7 +2446,7 @@ sqlite_deparse_direct_delete_sql(StringInfo buf, PlannerInfo *root,
List **retrieved_attrs)
{
deparse_expr_cxt context;

elog(DEBUG1, "sqlite_fdw : %s", __func__);

/* Set up context struct for recursion */
@@ -2653,7 +2656,7 @@ sqlite_deparse_const(Const *node, deparse_expr_cxt *context, int showtype)
appendStringInfo(buf, "X\'%s\'", extval + 2);
break;
case TIMESTAMPOID:
{
{
convert_timestamp_tounixepoch = false;
extval = OidOutputFunctionCall(typoutput, node->constvalue);

@@ -2675,8 +2678,8 @@ sqlite_deparse_const(Const *node, deparse_expr_cxt *context, int showtype)
sqlite_deparse_string_literal(buf, extval);
}
break;
case UUIDOID:
/* always deparse to BLOB because this is internal PostgreSQL storage
case UUIDOID:
/* always deparse to BLOB because this is internal PostgreSQL storage
* the string for BYTEA always seems to be in the format "\\x##"
* where # is a hex digit, Even if the value passed in is
* 'hi'::bytea we will receive "\x6869". Making this assumption
1,271 changes: 1,271 additions & 0 deletions expected/12.16/extra/bool.out

Large diffs are not rendered by default.

510 changes: 510 additions & 0 deletions expected/12.16/extra/uuid.out

Large diffs are not rendered by default.

549 changes: 33 additions & 516 deletions expected/12.16/type.out

Large diffs are not rendered by default.

1,271 changes: 1,271 additions & 0 deletions expected/13.12/extra/bool.out

Large diffs are not rendered by default.

510 changes: 510 additions & 0 deletions expected/13.12/extra/uuid.out

Large diffs are not rendered by default.

135 changes: 82 additions & 53 deletions expected/13.12/type.out

Large diffs are not rendered by default.

1,271 changes: 1,271 additions & 0 deletions expected/14.9/extra/bool.out

Large diffs are not rendered by default.

512 changes: 512 additions & 0 deletions expected/14.9/extra/uuid.out

Large diffs are not rendered by default.

135 changes: 82 additions & 53 deletions expected/14.9/type.out

Large diffs are not rendered by default.

1,271 changes: 1,271 additions & 0 deletions expected/15.4/extra/bool.out

Large diffs are not rendered by default.

512 changes: 512 additions & 0 deletions expected/15.4/extra/uuid.out

Large diffs are not rendered by default.

135 changes: 82 additions & 53 deletions expected/15.4/type.out

Large diffs are not rendered by default.

1,271 changes: 1,271 additions & 0 deletions expected/16.0/extra/bool.out

Large diffs are not rendered by default.

512 changes: 512 additions & 0 deletions expected/16.0/extra/uuid.out

Large diffs are not rendered by default.

551 changes: 33 additions & 518 deletions expected/16.0/type.out

Large diffs are not rendered by default.

190 changes: 190 additions & 0 deletions sql/12.16/extra/bool.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 000:
CREATE EXTENSION sqlite_fdw;
--Testcase 001:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');
--Testcase 002:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 01:
CREATE FOREIGN TABLE "type_BOOLEAN" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;
--Testcase 02:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (1, TRUE);
--Testcase 03:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (2, FALSE);
--Testcase 04:
CREATE FOREIGN TABLE "type_BOOLEAN+"( "i" int, "b" bool, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');
--Testcase 05:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE text;
--Testcase 06:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (3, TRUE);
--Testcase 07:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (4, FALSE);
--Testcase 08:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (5, true);
--Testcase 09:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (6, false);
--Testcase 10:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (7, 'Yes');
--Testcase 11:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (8, 'YeS');
--Testcase 12:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (9, 'yes');
--Testcase 13:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (10, 'no');
--Testcase 14:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (11, 'No');
--Testcase 15:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (12, 'nO');
--Testcase 16:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (13, 'off');
--Testcase 17:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (14, 'oFf');
--Testcase 18:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (15, 'on');
--Testcase 19:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (16, 'ON');
--Testcase 20:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (17, 't');
--Testcase 21:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (18, 'T');
--Testcase 22:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (19, 'Y');
--Testcase 23:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (20, 'y');
--Testcase 24:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (21, 'F');
--Testcase 25:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (22, 'f');
--Testcase 26:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (23, 'x');
--Testcase 27:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (24, '0');
--Testcase 28:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (25, '1');
--Testcase 29:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (26, NULL);
--Testcase 30:
SELECT * FROM "type_BOOLEAN";
--Testcase 31:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 32:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN";
--Testcase 33:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN+";
--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input
SELECT * FROM "type_BOOLEAN+";
--Testcase 35
DELETE FROM "type_BOOLEAN" WHERE i = 23;
--Testcase 36:
SELECT * FROM "type_BOOLEAN+";
--Testcase 37:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NULL;
--Testcase 38:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NOT NULL;
--Testcase 39:
SELECT * FROM "type_BOOLEAN+" WHERE b;
--Testcase 40:
SELECT * FROM "type_BOOLEAN+" WHERE NOT b;

--Testcase 41:
CREATE FOREIGN TABLE "type_BOOLEANpk" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;
--Testcase 42:
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 43:
INSERT INTO "type_BOOLEANpk" VALUES (FALSE);
--Testcase 44: ERR - primary key
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 45:
DELETE FROM "type_BOOLEANpk";

--Testcase 46:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE float8;
--Testcase 47:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (27, 3.14159265358979);
--Testcase 48:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 49: ERR - invalid float for bool column
SELECT * FROM "type_BOOLEAN+";
--Testcase 50
DELETE FROM "type_BOOLEAN" WHERE i = 27;
--Testcase 51:
SELECT * FROM "type_BOOLEAN+";

--Testcase 52:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE b;
--Testcase 53:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE NOT b;
--Testcase 54:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE b;
--Testcase 55:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE NOT b;

--Testcase 56:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;
--Testcase 57:
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;

--Testcase 58:
CREATE FOREIGN TABLE "type_BOOLEAN_oper"( "i" int OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');
--Testcase 59: see INIT.SQL with mixed affinity boolean data
SELECT * FROM "type_BOOLEAN_oper";
--Testcase 60:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";
--Testcase 61:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";

--Testcase 62:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;
--Testcase 63:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;

--Testcase 64:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;
--Testcase 65:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;

--Testcase 66:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 67:
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 68:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 69:
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 70:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 71:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 72:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 73:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 74:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 75:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b2;
--Testcase 76:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 77:
DELETE FROM "type_BOOLEAN_oper" WHERE b2;
--Testcase 78:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";

--Testcase 003:
DROP EXTENSION sqlite_fdw CASCADE;
213 changes: 213 additions & 0 deletions sql/12.16/extra/uuid.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 44:
CREATE EXTENSION sqlite_fdw;
--Testcase 45:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');

--Testcase 46:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 109:
CREATE FOREIGN TABLE "type_UUID"( "i" int OPTIONS (key 'true'), "u" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');
--Testcase 110:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE text;
--Testcase 111:
INSERT INTO "type_UUID" ("i", "u") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 112:
INSERT INTO "type_UUID" ("i", "u") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 113:
INSERT INTO "type_UUID" ("i", "u") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 114:
INSERT INTO "type_UUID" ("i", "u") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 115:
INSERT INTO "type_UUID" ("i", "u") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 116:
INSERT INTO "type_UUID" ("i", "u") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 117:
INSERT INTO "type_UUID" ("i", "u") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 118:
INSERT INTO "type_UUID" ("i", "u") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 119:
INSERT INTO "type_UUID" ("i", "u") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 120:
INSERT INTO "type_UUID" ("i", "u") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 121:
INSERT INTO "type_UUID" ("i", "u") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 122:
INSERT INTO "type_UUID" ("i", "u") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 123:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 124:
INSERT INTO "type_UUID" ("i", "u") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 125:
INSERT INTO "type_UUID" ("i", "u") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 126:
INSERT INTO "type_UUID" ("i", "u") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 127:
INSERT INTO "type_UUID" ("i", "u") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 128:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 129:
INSERT INTO "type_UUID" ("i", "u") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 130:
INSERT INTO "type_UUID" ("i", "u") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 131:
INSERT INTO "type_UUID" ("i", "u") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 132:
INSERT INTO "type_UUID" ("i", "u") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 133:
INSERT INTO "type_UUID" ("i", "u") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 134:
INSERT INTO "type_UUID" ("i", "u") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 135:
INSERT INTO "type_UUID" ("i", "u") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 136:
INSERT INTO "type_UUID" ("i", "u") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 137:
INSERT INTO "type_UUID" ("i", "u") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 138:
INSERT INTO "type_UUID" ("i", "u") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 139:
INSERT INTO "type_UUID" ("i", "u") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 140:
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 141:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 142:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (ADD column_type 'BLOB');
--Testcase 143:
INSERT INTO "type_UUID" ("i", "u") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 144:
INSERT INTO "type_UUID" ("i", "u") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 145:
INSERT INTO "type_UUID" ("i", "u") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 146:
INSERT INTO "type_UUID" ("i", "u") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 147:
INSERT INTO "type_UUID" ("i", "u") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 148:
INSERT INTO "type_UUID" ("i", "u") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 149:
INSERT INTO "type_UUID" ("i", "u") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 150:
INSERT INTO "type_UUID" ("i", "u") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 151:
INSERT INTO "type_UUID" ("i", "u") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 152:
INSERT INTO "type_UUID" ("i", "u") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 153:
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 154:
INSERT INTO "type_UUID" ("i", "u") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 155:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 156:
CREATE FOREIGN TABLE "type_UUID+"( "i" int OPTIONS (key 'true'), "u" uuid, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');
--Testcase 157:
SELECT * FROM "type_UUID+";
--Testcase 158:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 159:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 160:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 161:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 162:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 163:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 164:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 165:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 166:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 167:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 168:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 169:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 170:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 171:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 172:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 173:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 174:
SELECT * FROM "type_UUID+";
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';
--Testcase 176:
SELECT * FROM "type_UUID+";
--Testcase 177:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 176:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 177:
SELECT * FROM "type_UUID+";
--Testcase 178:
INSERT INTO "type_UUID" ("i", "u") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');
--Testcase 179:
SELECT * FROM "type_UUID+" WHERE "i" = 41;
--Testcase 180:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 181:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 182:
SELECT * FROM "type_UUID+";
--Testcase 183:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 184:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';
--Testcase 185:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 186:
INSERT INTO "type_UUID" ("i", "u") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));
--Testcase 187:
INSERT INTO "type_UUID" ("i", "u") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));
--Testcase 188:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 189:
SELECT * FROM "type_UUID+" WHERE "i" = 42;
--Testcase 190:
SELECT * FROM "type_UUID+" WHERE "i" = 43;
--Testcase 191:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 192:
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 193:
INSERT INTO "type_UUID" ("i", "u") VALUES (44, NULL);
--Testcase 194:
SELECT * FROM "type_UUID+";
--Testcase 195:
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 196:
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;
--Testcase 197:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 198:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;

--Testcase 47:
DROP EXTENSION sqlite_fdw CASCADE;
212 changes: 2 additions & 210 deletions sql/12.16/type.sql
Original file line number Diff line number Diff line change
@@ -13,10 +13,6 @@ IMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO public;

--Testcase 1:
INSERT INTO "type_STRING"(col) VALUES ('string');
--Testcase 2:
INSERT INTO "type_BOOLEAN"(col) VALUES (TRUE);
--Testcase 3:
INSERT INTO "type_BOOLEAN"(col) VALUES (FALSE);
--Testcase 4:
INSERT INTO "type_BYTE"(col) VALUES ('c');
--Testcase 5:
@@ -45,8 +41,6 @@ INSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.

--Testcase 16:
SELECT * FROM "type_STRING";
--Testcase 17:
SELECT * FROM "type_BOOLEAN";
--Testcase 18:
SELECT * FROM "type_BYTE";
--Testcase 19:
@@ -148,9 +142,9 @@ DELETE FROM type_JSON;
--Testcase 62:
DROP FOREIGN TABLE IF EXISTS "type_BOOLEAN";
--Testcase 63:
CREATE FOREIGN TABLE "type_BOOLEAN" (colx int, col boolean) SERVER sqlite_svr;
CREATE FOREIGN TABLE "type_BOOLEAN" (i int, b boolean) SERVER sqlite_svr;
--Testcase 64:
ALTER FOREIGN TABLE "type_BOOLEAN" DROP COLUMN colx;
ALTER FOREIGN TABLE "type_BOOLEAN" DROP COLUMN i;
--Testcase 65:
SELECT * FROM "type_BOOLEAN"; -- OK

@@ -266,208 +260,6 @@ SELECT * FROM "type_DOUBLE"; -- OK
--Testcase 107:
ALTER FOREIGN TABLE "type_DOUBLE" ALTER COLUMN col TYPE float8;

--Testcase 108:
DROP FOREIGN TABLE IF EXISTS "type_UUID";
--Testcase 109:
CREATE FOREIGN TABLE "type_UUID"( "i" int OPTIONS (key 'true'), "u" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');
--Testcase 110:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE text;
--Testcase 111:
INSERT INTO "type_UUID" ("i", "u") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 112:
INSERT INTO "type_UUID" ("i", "u") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 113:
INSERT INTO "type_UUID" ("i", "u") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 114:
INSERT INTO "type_UUID" ("i", "u") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 115:
INSERT INTO "type_UUID" ("i", "u") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 116:
INSERT INTO "type_UUID" ("i", "u") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 117:
INSERT INTO "type_UUID" ("i", "u") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 118:
INSERT INTO "type_UUID" ("i", "u") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 119:
INSERT INTO "type_UUID" ("i", "u") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 120:
INSERT INTO "type_UUID" ("i", "u") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 121:
INSERT INTO "type_UUID" ("i", "u") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 122:
INSERT INTO "type_UUID" ("i", "u") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 123:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 124:
INSERT INTO "type_UUID" ("i", "u") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 125:
INSERT INTO "type_UUID" ("i", "u") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 126:
INSERT INTO "type_UUID" ("i", "u") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 127:
INSERT INTO "type_UUID" ("i", "u") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 128:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 129:
INSERT INTO "type_UUID" ("i", "u") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 130:
INSERT INTO "type_UUID" ("i", "u") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 131:
INSERT INTO "type_UUID" ("i", "u") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 132:
INSERT INTO "type_UUID" ("i", "u") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 133:
INSERT INTO "type_UUID" ("i", "u") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 134:
INSERT INTO "type_UUID" ("i", "u") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 135:
INSERT INTO "type_UUID" ("i", "u") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 136:
INSERT INTO "type_UUID" ("i", "u") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 137:
INSERT INTO "type_UUID" ("i", "u") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 138:
INSERT INTO "type_UUID" ("i", "u") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 139:
INSERT INTO "type_UUID" ("i", "u") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 140:
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 141:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 142:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (ADD column_type 'BLOB');
--Testcase 143:
INSERT INTO "type_UUID" ("i", "u") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 144:
INSERT INTO "type_UUID" ("i", "u") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 145:
INSERT INTO "type_UUID" ("i", "u") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 146:
INSERT INTO "type_UUID" ("i", "u") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 147:
INSERT INTO "type_UUID" ("i", "u") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 148:
INSERT INTO "type_UUID" ("i", "u") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 149:
INSERT INTO "type_UUID" ("i", "u") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 150:
INSERT INTO "type_UUID" ("i", "u") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 151:
INSERT INTO "type_UUID" ("i", "u") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 152:
INSERT INTO "type_UUID" ("i", "u") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 153:
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 154:
INSERT INTO "type_UUID" ("i", "u") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 155:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 156:
CREATE FOREIGN TABLE "type_UUID+"( "i" int OPTIONS (key 'true'), "u" uuid, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');
--Testcase 157:
SELECT * FROM "type_UUID+";
--Testcase 158:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 159:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 160:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 161:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 162:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 163:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 164:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 165:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 166:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 167:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 168:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 169:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 170:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 171:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 172:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 173:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 174:
SELECT * FROM "type_UUID+";
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';
--Testcase 176:
SELECT * FROM "type_UUID+";
--Testcase 177:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 176:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 177:
SELECT * FROM "type_UUID+";
--Testcase 178:
INSERT INTO "type_UUID" ("i", "u") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');
--Testcase 179:
SELECT * FROM "type_UUID+" WHERE "i" = 41;
--Testcase 180:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 181:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 182:
SELECT * FROM "type_UUID+";
--Testcase 183:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 184:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';
--Testcase 185:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 186:
INSERT INTO "type_UUID" ("i", "u") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));
--Testcase 187:
INSERT INTO "type_UUID" ("i", "u") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));
--Testcase 188:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 189:
SELECT * FROM "type_UUID+" WHERE "i" = 42;
--Testcase 190:
SELECT * FROM "type_UUID+" WHERE "i" = 43;
--Testcase 191:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 192:
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 193:
INSERT INTO "type_UUID" ("i", "u") VALUES (44, NULL);
--Testcase 194:
SELECT * FROM "type_UUID+";
--Testcase 195:
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 196:
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;
--Testcase 197:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 198:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;

--Testcase 199:
DROP FOREIGN TABLE IF EXISTS "type_BIT";
--Testcase 200:
190 changes: 190 additions & 0 deletions sql/13.12/extra/bool.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 000:
CREATE EXTENSION sqlite_fdw;
--Testcase 001:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');
--Testcase 002:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 01:
CREATE FOREIGN TABLE "type_BOOLEAN" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;
--Testcase 02:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (1, TRUE);
--Testcase 03:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (2, FALSE);
--Testcase 04:
CREATE FOREIGN TABLE "type_BOOLEAN+"( "i" int, "b" bool, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');
--Testcase 05:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE text;
--Testcase 06:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (3, TRUE);
--Testcase 07:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (4, FALSE);
--Testcase 08:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (5, true);
--Testcase 09:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (6, false);
--Testcase 10:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (7, 'Yes');
--Testcase 11:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (8, 'YeS');
--Testcase 12:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (9, 'yes');
--Testcase 13:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (10, 'no');
--Testcase 14:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (11, 'No');
--Testcase 15:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (12, 'nO');
--Testcase 16:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (13, 'off');
--Testcase 17:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (14, 'oFf');
--Testcase 18:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (15, 'on');
--Testcase 19:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (16, 'ON');
--Testcase 20:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (17, 't');
--Testcase 21:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (18, 'T');
--Testcase 22:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (19, 'Y');
--Testcase 23:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (20, 'y');
--Testcase 24:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (21, 'F');
--Testcase 25:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (22, 'f');
--Testcase 26:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (23, 'x');
--Testcase 27:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (24, '0');
--Testcase 28:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (25, '1');
--Testcase 29:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (26, NULL);
--Testcase 30:
SELECT * FROM "type_BOOLEAN";
--Testcase 31:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 32:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN";
--Testcase 33:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN+";
--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input
SELECT * FROM "type_BOOLEAN+";
--Testcase 35
DELETE FROM "type_BOOLEAN" WHERE i = 23;
--Testcase 36:
SELECT * FROM "type_BOOLEAN+";
--Testcase 37:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NULL;
--Testcase 38:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NOT NULL;
--Testcase 39:
SELECT * FROM "type_BOOLEAN+" WHERE b;
--Testcase 40:
SELECT * FROM "type_BOOLEAN+" WHERE NOT b;

--Testcase 41:
CREATE FOREIGN TABLE "type_BOOLEANpk" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;
--Testcase 42:
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 43:
INSERT INTO "type_BOOLEANpk" VALUES (FALSE);
--Testcase 44: ERR - primary key
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 45:
DELETE FROM "type_BOOLEANpk";

--Testcase 46:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE float8;
--Testcase 47:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (27, 3.14159265358979);
--Testcase 48:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 49: ERR - invalid float for bool column
SELECT * FROM "type_BOOLEAN+";
--Testcase 50
DELETE FROM "type_BOOLEAN" WHERE i = 27;
--Testcase 51:
SELECT * FROM "type_BOOLEAN+";

--Testcase 52:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE b;
--Testcase 53:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE NOT b;
--Testcase 54:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE b;
--Testcase 55:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE NOT b;

--Testcase 56:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;
--Testcase 57:
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;

--Testcase 58:
CREATE FOREIGN TABLE "type_BOOLEAN_oper"( "i" int OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');
--Testcase 59: see INIT.SQL with mixed affinity boolean data
SELECT * FROM "type_BOOLEAN_oper";
--Testcase 60:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";
--Testcase 61:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";

--Testcase 62:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;
--Testcase 63:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;

--Testcase 64:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;
--Testcase 65:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;

--Testcase 66:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 67:
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 68:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 69:
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 70:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 71:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 72:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 73:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 74:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 75:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b2;
--Testcase 76:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 77:
DELETE FROM "type_BOOLEAN_oper" WHERE b2;
--Testcase 78:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";

--Testcase 003:
DROP EXTENSION sqlite_fdw CASCADE;
213 changes: 213 additions & 0 deletions sql/13.12/extra/uuid.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 44:
CREATE EXTENSION sqlite_fdw;
--Testcase 45:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');

--Testcase 46:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 109:
CREATE FOREIGN TABLE "type_UUID"( "i" int OPTIONS (key 'true'), "u" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');
--Testcase 110:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE text;
--Testcase 111:
INSERT INTO "type_UUID" ("i", "u") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 112:
INSERT INTO "type_UUID" ("i", "u") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 113:
INSERT INTO "type_UUID" ("i", "u") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 114:
INSERT INTO "type_UUID" ("i", "u") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 115:
INSERT INTO "type_UUID" ("i", "u") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 116:
INSERT INTO "type_UUID" ("i", "u") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 117:
INSERT INTO "type_UUID" ("i", "u") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 118:
INSERT INTO "type_UUID" ("i", "u") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 119:
INSERT INTO "type_UUID" ("i", "u") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 120:
INSERT INTO "type_UUID" ("i", "u") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 121:
INSERT INTO "type_UUID" ("i", "u") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 122:
INSERT INTO "type_UUID" ("i", "u") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 123:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 124:
INSERT INTO "type_UUID" ("i", "u") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 125:
INSERT INTO "type_UUID" ("i", "u") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 126:
INSERT INTO "type_UUID" ("i", "u") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 127:
INSERT INTO "type_UUID" ("i", "u") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 128:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 129:
INSERT INTO "type_UUID" ("i", "u") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 130:
INSERT INTO "type_UUID" ("i", "u") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 131:
INSERT INTO "type_UUID" ("i", "u") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 132:
INSERT INTO "type_UUID" ("i", "u") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 133:
INSERT INTO "type_UUID" ("i", "u") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 134:
INSERT INTO "type_UUID" ("i", "u") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 135:
INSERT INTO "type_UUID" ("i", "u") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 136:
INSERT INTO "type_UUID" ("i", "u") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 137:
INSERT INTO "type_UUID" ("i", "u") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 138:
INSERT INTO "type_UUID" ("i", "u") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 139:
INSERT INTO "type_UUID" ("i", "u") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 140:
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 141:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 142:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (ADD column_type 'BLOB');
--Testcase 143:
INSERT INTO "type_UUID" ("i", "u") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 144:
INSERT INTO "type_UUID" ("i", "u") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 145:
INSERT INTO "type_UUID" ("i", "u") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 146:
INSERT INTO "type_UUID" ("i", "u") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 147:
INSERT INTO "type_UUID" ("i", "u") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 148:
INSERT INTO "type_UUID" ("i", "u") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 149:
INSERT INTO "type_UUID" ("i", "u") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 150:
INSERT INTO "type_UUID" ("i", "u") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 151:
INSERT INTO "type_UUID" ("i", "u") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 152:
INSERT INTO "type_UUID" ("i", "u") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 153:
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 154:
INSERT INTO "type_UUID" ("i", "u") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 155:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 156:
CREATE FOREIGN TABLE "type_UUID+"( "i" int OPTIONS (key 'true'), "u" uuid, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');
--Testcase 157:
SELECT * FROM "type_UUID+";
--Testcase 158:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 159:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 160:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 161:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 162:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 163:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 164:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 165:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 166:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 167:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 168:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 169:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 170:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 171:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 172:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 173:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 174:
SELECT * FROM "type_UUID+";
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';
--Testcase 176:
SELECT * FROM "type_UUID+";
--Testcase 177:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 176:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 177:
SELECT * FROM "type_UUID+";
--Testcase 178:
INSERT INTO "type_UUID" ("i", "u") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');
--Testcase 179:
SELECT * FROM "type_UUID+" WHERE "i" = 41;
--Testcase 180:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 181:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 182:
SELECT * FROM "type_UUID+";
--Testcase 183:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 184:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';
--Testcase 185:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 186:
INSERT INTO "type_UUID" ("i", "u") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));
--Testcase 187:
INSERT INTO "type_UUID" ("i", "u") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));
--Testcase 188:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 189:
SELECT * FROM "type_UUID+" WHERE "i" = 42;
--Testcase 190:
SELECT * FROM "type_UUID+" WHERE "i" = 43;
--Testcase 191:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 192:
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 193:
INSERT INTO "type_UUID" ("i", "u") VALUES (44, NULL);
--Testcase 194:
SELECT * FROM "type_UUID+";
--Testcase 195:
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 196:
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;
--Testcase 197:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 198:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;

--Testcase 47:
DROP EXTENSION sqlite_fdw CASCADE;
10 changes: 2 additions & 8 deletions sql/13.12/type.sql
Original file line number Diff line number Diff line change
@@ -13,10 +13,6 @@ IMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO public;

--Testcase 1:
INSERT INTO "type_STRING"(col) VALUES ('string');
--Testcase 2:
INSERT INTO "type_BOOLEAN"(col) VALUES (TRUE);
--Testcase 3:
INSERT INTO "type_BOOLEAN"(col) VALUES (FALSE);
--Testcase 4:
INSERT INTO "type_BYTE"(col) VALUES ('c');
--Testcase 5:
@@ -45,8 +41,6 @@ INSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.

--Testcase 16:
SELECT * FROM "type_STRING";
--Testcase 17:
SELECT * FROM "type_BOOLEAN";
--Testcase 18:
SELECT * FROM "type_BYTE";
--Testcase 19:
@@ -148,9 +142,9 @@ DELETE FROM type_JSON;
--Testcase 62:
DROP FOREIGN TABLE IF EXISTS "type_BOOLEAN";
--Testcase 63:
CREATE FOREIGN TABLE "type_BOOLEAN" (colx int, col boolean) SERVER sqlite_svr;
CREATE FOREIGN TABLE "type_BOOLEAN" (i int, b boolean) SERVER sqlite_svr;
--Testcase 64:
ALTER FOREIGN TABLE "type_BOOLEAN" DROP COLUMN colx;
ALTER FOREIGN TABLE "type_BOOLEAN" DROP COLUMN i;
--Testcase 65:
SELECT * FROM "type_BOOLEAN"; -- OK

190 changes: 190 additions & 0 deletions sql/14.9/extra/bool.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 000:
CREATE EXTENSION sqlite_fdw;
--Testcase 001:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');
--Testcase 002:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 01:
CREATE FOREIGN TABLE "type_BOOLEAN" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;
--Testcase 02:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (1, TRUE);
--Testcase 03:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (2, FALSE);
--Testcase 04:
CREATE FOREIGN TABLE "type_BOOLEAN+"( "i" int, "b" bool, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');
--Testcase 05:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE text;
--Testcase 06:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (3, TRUE);
--Testcase 07:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (4, FALSE);
--Testcase 08:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (5, true);
--Testcase 09:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (6, false);
--Testcase 10:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (7, 'Yes');
--Testcase 11:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (8, 'YeS');
--Testcase 12:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (9, 'yes');
--Testcase 13:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (10, 'no');
--Testcase 14:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (11, 'No');
--Testcase 15:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (12, 'nO');
--Testcase 16:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (13, 'off');
--Testcase 17:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (14, 'oFf');
--Testcase 18:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (15, 'on');
--Testcase 19:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (16, 'ON');
--Testcase 20:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (17, 't');
--Testcase 21:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (18, 'T');
--Testcase 22:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (19, 'Y');
--Testcase 23:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (20, 'y');
--Testcase 24:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (21, 'F');
--Testcase 25:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (22, 'f');
--Testcase 26:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (23, 'x');
--Testcase 27:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (24, '0');
--Testcase 28:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (25, '1');
--Testcase 29:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (26, NULL);
--Testcase 30:
SELECT * FROM "type_BOOLEAN";
--Testcase 31:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 32:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN";
--Testcase 33:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN+";
--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input
SELECT * FROM "type_BOOLEAN+";
--Testcase 35
DELETE FROM "type_BOOLEAN" WHERE i = 23;
--Testcase 36:
SELECT * FROM "type_BOOLEAN+";
--Testcase 37:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NULL;
--Testcase 38:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NOT NULL;
--Testcase 39:
SELECT * FROM "type_BOOLEAN+" WHERE b;
--Testcase 40:
SELECT * FROM "type_BOOLEAN+" WHERE NOT b;

--Testcase 41:
CREATE FOREIGN TABLE "type_BOOLEANpk" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;
--Testcase 42:
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 43:
INSERT INTO "type_BOOLEANpk" VALUES (FALSE);
--Testcase 44: ERR - primary key
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 45:
DELETE FROM "type_BOOLEANpk";

--Testcase 46:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE float8;
--Testcase 47:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (27, 3.14159265358979);
--Testcase 48:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 49: ERR - invalid float for bool column
SELECT * FROM "type_BOOLEAN+";
--Testcase 50
DELETE FROM "type_BOOLEAN" WHERE i = 27;
--Testcase 51:
SELECT * FROM "type_BOOLEAN+";

--Testcase 52:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE b;
--Testcase 53:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE NOT b;
--Testcase 54:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE b;
--Testcase 55:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE NOT b;

--Testcase 56:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;
--Testcase 57:
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;

--Testcase 58:
CREATE FOREIGN TABLE "type_BOOLEAN_oper"( "i" int OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');
--Testcase 59: see INIT.SQL with mixed affinity boolean data
SELECT * FROM "type_BOOLEAN_oper";
--Testcase 60:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";
--Testcase 61:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";

--Testcase 62:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;
--Testcase 63:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;

--Testcase 64:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;
--Testcase 65:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;

--Testcase 66:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 67:
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 68:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 69:
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 70:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 71:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 72:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 73:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 74:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 75:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b2;
--Testcase 76:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 77:
DELETE FROM "type_BOOLEAN_oper" WHERE b2;
--Testcase 78:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";

--Testcase 003:
DROP EXTENSION sqlite_fdw CASCADE;
213 changes: 213 additions & 0 deletions sql/14.9/extra/uuid.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 44:
CREATE EXTENSION sqlite_fdw;
--Testcase 45:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');

--Testcase 46:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 109:
CREATE FOREIGN TABLE "type_UUID"( "i" int OPTIONS (key 'true'), "u" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');
--Testcase 110:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE text;
--Testcase 111:
INSERT INTO "type_UUID" ("i", "u") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 112:
INSERT INTO "type_UUID" ("i", "u") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 113:
INSERT INTO "type_UUID" ("i", "u") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 114:
INSERT INTO "type_UUID" ("i", "u") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 115:
INSERT INTO "type_UUID" ("i", "u") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 116:
INSERT INTO "type_UUID" ("i", "u") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 117:
INSERT INTO "type_UUID" ("i", "u") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 118:
INSERT INTO "type_UUID" ("i", "u") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 119:
INSERT INTO "type_UUID" ("i", "u") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 120:
INSERT INTO "type_UUID" ("i", "u") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 121:
INSERT INTO "type_UUID" ("i", "u") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 122:
INSERT INTO "type_UUID" ("i", "u") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 123:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 124:
INSERT INTO "type_UUID" ("i", "u") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 125:
INSERT INTO "type_UUID" ("i", "u") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 126:
INSERT INTO "type_UUID" ("i", "u") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 127:
INSERT INTO "type_UUID" ("i", "u") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 128:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 129:
INSERT INTO "type_UUID" ("i", "u") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 130:
INSERT INTO "type_UUID" ("i", "u") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 131:
INSERT INTO "type_UUID" ("i", "u") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 132:
INSERT INTO "type_UUID" ("i", "u") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 133:
INSERT INTO "type_UUID" ("i", "u") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 134:
INSERT INTO "type_UUID" ("i", "u") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 135:
INSERT INTO "type_UUID" ("i", "u") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 136:
INSERT INTO "type_UUID" ("i", "u") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 137:
INSERT INTO "type_UUID" ("i", "u") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 138:
INSERT INTO "type_UUID" ("i", "u") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 139:
INSERT INTO "type_UUID" ("i", "u") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 140:
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 141:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 142:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (ADD column_type 'BLOB');
--Testcase 143:
INSERT INTO "type_UUID" ("i", "u") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 144:
INSERT INTO "type_UUID" ("i", "u") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 145:
INSERT INTO "type_UUID" ("i", "u") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 146:
INSERT INTO "type_UUID" ("i", "u") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 147:
INSERT INTO "type_UUID" ("i", "u") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 148:
INSERT INTO "type_UUID" ("i", "u") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 149:
INSERT INTO "type_UUID" ("i", "u") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 150:
INSERT INTO "type_UUID" ("i", "u") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 151:
INSERT INTO "type_UUID" ("i", "u") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 152:
INSERT INTO "type_UUID" ("i", "u") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 153:
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 154:
INSERT INTO "type_UUID" ("i", "u") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 155:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 156:
CREATE FOREIGN TABLE "type_UUID+"( "i" int OPTIONS (key 'true'), "u" uuid, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');
--Testcase 157:
SELECT * FROM "type_UUID+";
--Testcase 158:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 159:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 160:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 161:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 162:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 163:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 164:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 165:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 166:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 167:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 168:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 169:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 170:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 171:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 172:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 173:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 174:
SELECT * FROM "type_UUID+";
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';
--Testcase 176:
SELECT * FROM "type_UUID+";
--Testcase 177:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 176:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 177:
SELECT * FROM "type_UUID+";
--Testcase 178:
INSERT INTO "type_UUID" ("i", "u") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');
--Testcase 179:
SELECT * FROM "type_UUID+" WHERE "i" = 41;
--Testcase 180:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 181:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 182:
SELECT * FROM "type_UUID+";
--Testcase 183:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 184:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';
--Testcase 185:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 186:
INSERT INTO "type_UUID" ("i", "u") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));
--Testcase 187:
INSERT INTO "type_UUID" ("i", "u") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));
--Testcase 188:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 189:
SELECT * FROM "type_UUID+" WHERE "i" = 42;
--Testcase 190:
SELECT * FROM "type_UUID+" WHERE "i" = 43;
--Testcase 191:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 192:
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 193:
INSERT INTO "type_UUID" ("i", "u") VALUES (44, NULL);
--Testcase 194:
SELECT * FROM "type_UUID+";
--Testcase 195:
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 196:
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;
--Testcase 197:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 198:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;

--Testcase 47:
DROP EXTENSION sqlite_fdw CASCADE;
10 changes: 2 additions & 8 deletions sql/14.9/type.sql
Original file line number Diff line number Diff line change
@@ -13,10 +13,6 @@ IMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO public;

--Testcase 1:
INSERT INTO "type_STRING"(col) VALUES ('string');
--Testcase 2:
INSERT INTO "type_BOOLEAN"(col) VALUES (TRUE);
--Testcase 3:
INSERT INTO "type_BOOLEAN"(col) VALUES (FALSE);
--Testcase 4:
INSERT INTO "type_BYTE"(col) VALUES ('c');
--Testcase 5:
@@ -45,8 +41,6 @@ INSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.

--Testcase 16:
SELECT * FROM "type_STRING";
--Testcase 17:
SELECT * FROM "type_BOOLEAN";
--Testcase 18:
SELECT * FROM "type_BYTE";
--Testcase 19:
@@ -148,9 +142,9 @@ DELETE FROM type_JSON;
--Testcase 62:
DROP FOREIGN TABLE IF EXISTS "type_BOOLEAN";
--Testcase 63:
CREATE FOREIGN TABLE "type_BOOLEAN" (colx int, col boolean) SERVER sqlite_svr;
CREATE FOREIGN TABLE "type_BOOLEAN" (i int, b boolean) SERVER sqlite_svr;
--Testcase 64:
ALTER FOREIGN TABLE "type_BOOLEAN" DROP COLUMN colx;
ALTER FOREIGN TABLE "type_BOOLEAN" DROP COLUMN i;
--Testcase 65:
SELECT * FROM "type_BOOLEAN"; -- OK

190 changes: 190 additions & 0 deletions sql/15.4/extra/bool.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 000:
CREATE EXTENSION sqlite_fdw;
--Testcase 001:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');
--Testcase 002:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 01:
CREATE FOREIGN TABLE "type_BOOLEAN" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;
--Testcase 02:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (1, TRUE);
--Testcase 03:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (2, FALSE);
--Testcase 04:
CREATE FOREIGN TABLE "type_BOOLEAN+"( "i" int, "b" bool, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');
--Testcase 05:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE text;
--Testcase 06:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (3, TRUE);
--Testcase 07:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (4, FALSE);
--Testcase 08:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (5, true);
--Testcase 09:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (6, false);
--Testcase 10:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (7, 'Yes');
--Testcase 11:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (8, 'YeS');
--Testcase 12:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (9, 'yes');
--Testcase 13:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (10, 'no');
--Testcase 14:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (11, 'No');
--Testcase 15:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (12, 'nO');
--Testcase 16:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (13, 'off');
--Testcase 17:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (14, 'oFf');
--Testcase 18:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (15, 'on');
--Testcase 19:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (16, 'ON');
--Testcase 20:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (17, 't');
--Testcase 21:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (18, 'T');
--Testcase 22:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (19, 'Y');
--Testcase 23:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (20, 'y');
--Testcase 24:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (21, 'F');
--Testcase 25:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (22, 'f');
--Testcase 26:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (23, 'x');
--Testcase 27:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (24, '0');
--Testcase 28:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (25, '1');
--Testcase 29:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (26, NULL);
--Testcase 30:
SELECT * FROM "type_BOOLEAN";
--Testcase 31:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 32:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN";
--Testcase 33:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN+";
--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input
SELECT * FROM "type_BOOLEAN+";
--Testcase 35
DELETE FROM "type_BOOLEAN" WHERE i = 23;
--Testcase 36:
SELECT * FROM "type_BOOLEAN+";
--Testcase 37:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NULL;
--Testcase 38:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NOT NULL;
--Testcase 39:
SELECT * FROM "type_BOOLEAN+" WHERE b;
--Testcase 40:
SELECT * FROM "type_BOOLEAN+" WHERE NOT b;

--Testcase 41:
CREATE FOREIGN TABLE "type_BOOLEANpk" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;
--Testcase 42:
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 43:
INSERT INTO "type_BOOLEANpk" VALUES (FALSE);
--Testcase 44: ERR - primary key
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 45:
DELETE FROM "type_BOOLEANpk";

--Testcase 46:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE float8;
--Testcase 47:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (27, 3.14159265358979);
--Testcase 48:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 49: ERR - invalid float for bool column
SELECT * FROM "type_BOOLEAN+";
--Testcase 50
DELETE FROM "type_BOOLEAN" WHERE i = 27;
--Testcase 51:
SELECT * FROM "type_BOOLEAN+";

--Testcase 52:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE b;
--Testcase 53:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE NOT b;
--Testcase 54:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE b;
--Testcase 55:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE NOT b;

--Testcase 56:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;
--Testcase 57:
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;

--Testcase 58:
CREATE FOREIGN TABLE "type_BOOLEAN_oper"( "i" int OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');
--Testcase 59: see INIT.SQL with mixed affinity boolean data
SELECT * FROM "type_BOOLEAN_oper";
--Testcase 60:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";
--Testcase 61:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";

--Testcase 62:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;
--Testcase 63:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;

--Testcase 64:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;
--Testcase 65:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;

--Testcase 66:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 67:
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 68:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 69:
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 70:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 71:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 72:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 73:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 74:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 75:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b2;
--Testcase 76:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 77:
DELETE FROM "type_BOOLEAN_oper" WHERE b2;
--Testcase 78:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";

--Testcase 003:
DROP EXTENSION sqlite_fdw CASCADE;
213 changes: 213 additions & 0 deletions sql/15.4/extra/uuid.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 44:
CREATE EXTENSION sqlite_fdw;
--Testcase 45:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');

--Testcase 46:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 109:
CREATE FOREIGN TABLE "type_UUID"( "i" int OPTIONS (key 'true'), "u" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');
--Testcase 110:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE text;
--Testcase 111:
INSERT INTO "type_UUID" ("i", "u") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 112:
INSERT INTO "type_UUID" ("i", "u") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 113:
INSERT INTO "type_UUID" ("i", "u") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 114:
INSERT INTO "type_UUID" ("i", "u") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 115:
INSERT INTO "type_UUID" ("i", "u") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 116:
INSERT INTO "type_UUID" ("i", "u") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 117:
INSERT INTO "type_UUID" ("i", "u") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 118:
INSERT INTO "type_UUID" ("i", "u") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 119:
INSERT INTO "type_UUID" ("i", "u") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 120:
INSERT INTO "type_UUID" ("i", "u") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 121:
INSERT INTO "type_UUID" ("i", "u") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 122:
INSERT INTO "type_UUID" ("i", "u") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 123:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 124:
INSERT INTO "type_UUID" ("i", "u") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 125:
INSERT INTO "type_UUID" ("i", "u") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 126:
INSERT INTO "type_UUID" ("i", "u") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 127:
INSERT INTO "type_UUID" ("i", "u") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 128:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 129:
INSERT INTO "type_UUID" ("i", "u") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 130:
INSERT INTO "type_UUID" ("i", "u") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 131:
INSERT INTO "type_UUID" ("i", "u") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 132:
INSERT INTO "type_UUID" ("i", "u") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 133:
INSERT INTO "type_UUID" ("i", "u") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 134:
INSERT INTO "type_UUID" ("i", "u") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 135:
INSERT INTO "type_UUID" ("i", "u") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 136:
INSERT INTO "type_UUID" ("i", "u") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 137:
INSERT INTO "type_UUID" ("i", "u") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 138:
INSERT INTO "type_UUID" ("i", "u") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 139:
INSERT INTO "type_UUID" ("i", "u") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 140:
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 141:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 142:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (ADD column_type 'BLOB');
--Testcase 143:
INSERT INTO "type_UUID" ("i", "u") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 144:
INSERT INTO "type_UUID" ("i", "u") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 145:
INSERT INTO "type_UUID" ("i", "u") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 146:
INSERT INTO "type_UUID" ("i", "u") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 147:
INSERT INTO "type_UUID" ("i", "u") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 148:
INSERT INTO "type_UUID" ("i", "u") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 149:
INSERT INTO "type_UUID" ("i", "u") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 150:
INSERT INTO "type_UUID" ("i", "u") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 151:
INSERT INTO "type_UUID" ("i", "u") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 152:
INSERT INTO "type_UUID" ("i", "u") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 153:
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 154:
INSERT INTO "type_UUID" ("i", "u") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 155:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 156:
CREATE FOREIGN TABLE "type_UUID+"( "i" int OPTIONS (key 'true'), "u" uuid, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');
--Testcase 157:
SELECT * FROM "type_UUID+";
--Testcase 158:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 159:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 160:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 161:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 162:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 163:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 164:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 165:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 166:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 167:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 168:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 169:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 170:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 171:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 172:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 173:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 174:
SELECT * FROM "type_UUID+";
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';
--Testcase 176:
SELECT * FROM "type_UUID+";
--Testcase 177:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 176:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 177:
SELECT * FROM "type_UUID+";
--Testcase 178:
INSERT INTO "type_UUID" ("i", "u") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');
--Testcase 179:
SELECT * FROM "type_UUID+" WHERE "i" = 41;
--Testcase 180:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 181:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 182:
SELECT * FROM "type_UUID+";
--Testcase 183:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 184:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';
--Testcase 185:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 186:
INSERT INTO "type_UUID" ("i", "u") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));
--Testcase 187:
INSERT INTO "type_UUID" ("i", "u") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));
--Testcase 188:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 189:
SELECT * FROM "type_UUID+" WHERE "i" = 42;
--Testcase 190:
SELECT * FROM "type_UUID+" WHERE "i" = 43;
--Testcase 191:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 192:
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 193:
INSERT INTO "type_UUID" ("i", "u") VALUES (44, NULL);
--Testcase 194:
SELECT * FROM "type_UUID+";
--Testcase 195:
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 196:
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;
--Testcase 197:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 198:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;

--Testcase 47:
DROP EXTENSION sqlite_fdw CASCADE;
10 changes: 2 additions & 8 deletions sql/15.4/type.sql
Original file line number Diff line number Diff line change
@@ -13,10 +13,6 @@ IMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO public;

--Testcase 1:
INSERT INTO "type_STRING"(col) VALUES ('string');
--Testcase 2:
INSERT INTO "type_BOOLEAN"(col) VALUES (TRUE);
--Testcase 3:
INSERT INTO "type_BOOLEAN"(col) VALUES (FALSE);
--Testcase 4:
INSERT INTO "type_BYTE"(col) VALUES ('c');
--Testcase 5:
@@ -45,8 +41,6 @@ INSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.

--Testcase 16:
SELECT * FROM "type_STRING";
--Testcase 17:
SELECT * FROM "type_BOOLEAN";
--Testcase 18:
SELECT * FROM "type_BYTE";
--Testcase 19:
@@ -148,9 +142,9 @@ DELETE FROM type_JSON;
--Testcase 62:
DROP FOREIGN TABLE IF EXISTS "type_BOOLEAN";
--Testcase 63:
CREATE FOREIGN TABLE "type_BOOLEAN" (colx int, col boolean) SERVER sqlite_svr;
CREATE FOREIGN TABLE "type_BOOLEAN" (i int, b boolean) SERVER sqlite_svr;
--Testcase 64:
ALTER FOREIGN TABLE "type_BOOLEAN" DROP COLUMN colx;
ALTER FOREIGN TABLE "type_BOOLEAN" DROP COLUMN i;
--Testcase 65:
SELECT * FROM "type_BOOLEAN"; -- OK

190 changes: 190 additions & 0 deletions sql/16.0/extra/bool.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 000:
CREATE EXTENSION sqlite_fdw;
--Testcase 001:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');
--Testcase 002:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 01:
CREATE FOREIGN TABLE "type_BOOLEAN" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;
--Testcase 02:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (1, TRUE);
--Testcase 03:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (2, FALSE);
--Testcase 04:
CREATE FOREIGN TABLE "type_BOOLEAN+"( "i" int, "b" bool, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');
--Testcase 05:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE text;
--Testcase 06:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (3, TRUE);
--Testcase 07:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (4, FALSE);
--Testcase 08:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (5, true);
--Testcase 09:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (6, false);
--Testcase 10:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (7, 'Yes');
--Testcase 11:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (8, 'YeS');
--Testcase 12:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (9, 'yes');
--Testcase 13:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (10, 'no');
--Testcase 14:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (11, 'No');
--Testcase 15:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (12, 'nO');
--Testcase 16:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (13, 'off');
--Testcase 17:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (14, 'oFf');
--Testcase 18:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (15, 'on');
--Testcase 19:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (16, 'ON');
--Testcase 20:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (17, 't');
--Testcase 21:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (18, 'T');
--Testcase 22:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (19, 'Y');
--Testcase 23:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (20, 'y');
--Testcase 24:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (21, 'F');
--Testcase 25:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (22, 'f');
--Testcase 26:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (23, 'x');
--Testcase 27:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (24, '0');
--Testcase 28:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (25, '1');
--Testcase 29:
INSERT INTO "type_BOOLEAN" (i, b) VALUES (26, NULL);
--Testcase 30:
SELECT * FROM "type_BOOLEAN";
--Testcase 31:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 32:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN";
--Testcase 33:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT * FROM "type_BOOLEAN+";
--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input
SELECT * FROM "type_BOOLEAN+";
--Testcase 35
DELETE FROM "type_BOOLEAN" WHERE i = 23;
--Testcase 36:
SELECT * FROM "type_BOOLEAN+";
--Testcase 37:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NULL;
--Testcase 38:
SELECT * FROM "type_BOOLEAN+" WHERE b IS NOT NULL;
--Testcase 39:
SELECT * FROM "type_BOOLEAN+" WHERE b;
--Testcase 40:
SELECT * FROM "type_BOOLEAN+" WHERE NOT b;

--Testcase 41:
CREATE FOREIGN TABLE "type_BOOLEANpk" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;
--Testcase 42:
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 43:
INSERT INTO "type_BOOLEANpk" VALUES (FALSE);
--Testcase 44: ERR - primary key
INSERT INTO "type_BOOLEANpk" VALUES (TRUE);
--Testcase 45:
DELETE FROM "type_BOOLEANpk";

--Testcase 46:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE float8;
--Testcase 47:
INSERT INTO "type_BOOLEAN"(i, b) VALUES (27, 3.14159265358979);
--Testcase 48:
ALTER FOREIGN TABLE "type_BOOLEAN" ALTER COLUMN "b" TYPE bool;
--Testcase 49: ERR - invalid float for bool column
SELECT * FROM "type_BOOLEAN+";
--Testcase 50
DELETE FROM "type_BOOLEAN" WHERE i = 27;
--Testcase 51:
SELECT * FROM "type_BOOLEAN+";

--Testcase 52:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE b;
--Testcase 53:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN" SET b = NULL WHERE NOT b;
--Testcase 54:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE b;
--Testcase 55:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN" WHERE NOT b;

--Testcase 56:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;
--Testcase 57:
SELECT *, NOT b nb FROM "type_BOOLEAN+" b;

--Testcase 58:
CREATE FOREIGN TABLE "type_BOOLEAN_oper"( "i" int OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');
--Testcase 59: see INIT.SQL with mixed affinity boolean data
SELECT * FROM "type_BOOLEAN_oper";
--Testcase 60:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";
--Testcase 61:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper";

--Testcase 62:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;
--Testcase 63:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 AND b2;

--Testcase 64:
EXPLAIN (VERBOSE, COSTS OFF)
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;
--Testcase 65:
SELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM "type_BOOLEAN_oper" WHERE b1 OR b2;

--Testcase 66:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 67:
UPDATE "type_BOOLEAN_oper" SET b1 = NULL WHERE NOT b1;
--Testcase 68:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 69:
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 70:
EXPLAIN (VERBOSE, COSTS OFF)
UPDATE "type_BOOLEAN_oper" SET b1 = false WHERE b1 OR b2;
--Testcase 71:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 72:
EXPLAIN (VERBOSE, COSTS OFF)
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 73:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b1 AND b2;
--Testcase 74:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 75:
DELETE FROM "type_BOOLEAN_oper" WHERE NOT b2;
--Testcase 76:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";
--Testcase 77:
DELETE FROM "type_BOOLEAN_oper" WHERE b2;
--Testcase 78:
SELECT DISTINCT b1, b2 FROM "type_BOOLEAN_oper";

--Testcase 003:
DROP EXTENSION sqlite_fdw CASCADE;
213 changes: 213 additions & 0 deletions sql/16.0/extra/uuid.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
--SET log_min_messages TO DEBUG1;
--SET client_min_messages TO DEBUG1;
--Testcase 44:
CREATE EXTENSION sqlite_fdw;
--Testcase 45:
CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw
OPTIONS (database '/tmp/sqlitefdw_test.db');

--Testcase 46:
CREATE SERVER sqlite2 FOREIGN DATA WRAPPER sqlite_fdw;

--Testcase 109:
CREATE FOREIGN TABLE "type_UUID"( "i" int OPTIONS (key 'true'), "u" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');
--Testcase 110:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE text;
--Testcase 111:
INSERT INTO "type_UUID" ("i", "u") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 112:
INSERT INTO "type_UUID" ("i", "u") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 113:
INSERT INTO "type_UUID" ("i", "u") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 114:
INSERT INTO "type_UUID" ("i", "u") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 115:
INSERT INTO "type_UUID" ("i", "u") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 116:
INSERT INTO "type_UUID" ("i", "u") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 117:
INSERT INTO "type_UUID" ("i", "u") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 118:
INSERT INTO "type_UUID" ("i", "u") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 119:
INSERT INTO "type_UUID" ("i", "u") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 120:
INSERT INTO "type_UUID" ("i", "u") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 121:
INSERT INTO "type_UUID" ("i", "u") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 122:
INSERT INTO "type_UUID" ("i", "u") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 123:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 124:
INSERT INTO "type_UUID" ("i", "u") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 125:
INSERT INTO "type_UUID" ("i", "u") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 126:
INSERT INTO "type_UUID" ("i", "u") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));
--Testcase 127:
INSERT INTO "type_UUID" ("i", "u") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));
--Testcase 128:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 129:
INSERT INTO "type_UUID" ("i", "u") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 130:
INSERT INTO "type_UUID" ("i", "u") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 131:
INSERT INTO "type_UUID" ("i", "u") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 132:
INSERT INTO "type_UUID" ("i", "u") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 133:
INSERT INTO "type_UUID" ("i", "u") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 134:
INSERT INTO "type_UUID" ("i", "u") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 135:
INSERT INTO "type_UUID" ("i", "u") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 136:
INSERT INTO "type_UUID" ("i", "u") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 137:
INSERT INTO "type_UUID" ("i", "u") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 138:
INSERT INTO "type_UUID" ("i", "u") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 139:
INSERT INTO "type_UUID" ("i", "u") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 140:
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 141:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 142:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (ADD column_type 'BLOB');
--Testcase 143:
INSERT INTO "type_UUID" ("i", "u") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
--Testcase 144:
INSERT INTO "type_UUID" ("i", "u") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');
--Testcase 145:
INSERT INTO "type_UUID" ("i", "u") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');
--Testcase 146:
INSERT INTO "type_UUID" ("i", "u") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');
--Testcase 147:
INSERT INTO "type_UUID" ("i", "u") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');
--Testcase 148:
INSERT INTO "type_UUID" ("i", "u") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');
--Testcase 149:
INSERT INTO "type_UUID" ("i", "u") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');
--Testcase 150:
INSERT INTO "type_UUID" ("i", "u") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');
--Testcase 151:
INSERT INTO "type_UUID" ("i", "u") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');
--Testcase 152:
INSERT INTO "type_UUID" ("i", "u") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');
--Testcase 153:
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 154:
INSERT INTO "type_UUID" ("i", "u") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');
--Testcase 155:
EXPLAIN VERBOSE
INSERT INTO "type_UUID" ("i", "u") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');
--Testcase 156:
CREATE FOREIGN TABLE "type_UUID+"( "i" int OPTIONS (key 'true'), "u" uuid, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');
--Testcase 157:
SELECT * FROM "type_UUID+";
--Testcase 158:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 159:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 160:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 161:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 162:
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 163:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" where "u" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';
--Testcase 164:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 165:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 166:
SELECT * FROM "type_UUID+" where "u" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';
--Testcase 167:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 168:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 169:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 170:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "i" = 25;
--Testcase 171:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 172:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 173:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';
--Testcase 174:
SELECT * FROM "type_UUID+";
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';
--Testcase 176:
SELECT * FROM "type_UUID+";
--Testcase 177:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'TEXT');
--Testcase 175:
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 176:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "u" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';
--Testcase 177:
SELECT * FROM "type_UUID+";
--Testcase 178:
INSERT INTO "type_UUID" ("i", "u") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');
--Testcase 179:
SELECT * FROM "type_UUID+" WHERE "i" = 41;
--Testcase 180:
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 181:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';
--Testcase 182:
SELECT * FROM "type_UUID+";
--Testcase 183:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" OPTIONS (SET column_type 'BLOB');
--Testcase 184:
EXPLAIN VERBOSE
UPDATE "type_UUID" SET "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE "u" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';
--Testcase 185:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE bytea;
--Testcase 186:
INSERT INTO "type_UUID" ("i", "u") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));
--Testcase 187:
INSERT INTO "type_UUID" ("i", "u") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));
--Testcase 188:
ALTER FOREIGN TABLE "type_UUID" ALTER COLUMN "u" TYPE uuid;
--Testcase 189:
SELECT * FROM "type_UUID+" WHERE "i" = 42;
--Testcase 190:
SELECT * FROM "type_UUID+" WHERE "i" = 43;
--Testcase 191:
EXPLAIN VERBOSE
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 192:
DELETE FROM "type_UUID" WHERE "i" IN (42, 43);
--Testcase 193:
INSERT INTO "type_UUID" ("i", "u") VALUES (44, NULL);
--Testcase 194:
SELECT * FROM "type_UUID+";
--Testcase 195:
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 196:
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;
--Testcase 197:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NULL;
--Testcase 198:
EXPLAIN VERBOSE
SELECT * FROM "type_UUID+" WHERE "u" IS NOT NULL;

--Testcase 47:
DROP EXTENSION sqlite_fdw CASCADE;
1 change: 0 additions & 1 deletion sql/16.0/sqlite_fdw.sql
Original file line number Diff line number Diff line change
@@ -791,4 +791,3 @@ DROP FOREIGN TABLE case_exp;
DROP SERVER sqlite_svr;
--Testcase 152:
DROP EXTENSION sqlite_fdw CASCADE;

Loading

0 comments on commit a387b2f

Please sign in to comment.