From 00e786af00d4a0dc212ea7b059651b7960561a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?mehmet=20furkan=20=C5=9Fahin?= Date: Mon, 16 Apr 2018 15:26:44 +0300 Subject: [PATCH] Capital named schema support is added --- .../distributed/metadata/metadata_sync.c | 4 +- .../regress/expected/multi_schema_support.out | 113 ++++++++++++++++++ src/test/regress/sql/multi_schema_support.sql | 74 ++++++++++++ 3 files changed, 190 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/metadata/metadata_sync.c b/src/backend/distributed/metadata/metadata_sync.c index f3f9b676b..915d49b81 100644 --- a/src/backend/distributed/metadata/metadata_sync.c +++ b/src/backend/distributed/metadata/metadata_sync.c @@ -948,6 +948,7 @@ CreateSchemaDDLCommand(Oid schemaId) char *schemaName = get_namespace_name(schemaId); StringInfo schemaNameDef = NULL; const char *ownerName = NULL; + const char *quotedSchemaName = NULL; if (strncmp(schemaName, "public", NAMEDATALEN) == 0) { @@ -955,8 +956,9 @@ CreateSchemaDDLCommand(Oid schemaId) } schemaNameDef = makeStringInfo(); + quotedSchemaName = quote_identifier(schemaName); ownerName = quote_identifier(SchemaOwnerName(schemaId)); - appendStringInfo(schemaNameDef, CREATE_SCHEMA_COMMAND, schemaName, ownerName); + appendStringInfo(schemaNameDef, CREATE_SCHEMA_COMMAND, quotedSchemaName, ownerName); return schemaNameDef->data; } diff --git a/src/test/regress/expected/multi_schema_support.out b/src/test/regress/expected/multi_schema_support.out index 2339230ef..a7d692c1d 100644 --- a/src/test/regress/expected/multi_schema_support.out +++ b/src/test/regress/expected/multi_schema_support.out @@ -1090,6 +1090,115 @@ SELECT sum(result::int) FROM run_command_on_shards('run_test_schema.test_table', 24576 (1 row) +-- test capital letters on both table and schema names +SET citus.task_executor_type to "real-time"; +-- create schema with weird names +CREATE SCHEMA "CiTuS.TeeN"; +CREATE SCHEMA "CiTUS.TEEN2"; +-- create table with weird names +CREATE TABLE "CiTuS.TeeN"."TeeNTabLE.1!?!"(id int, "TeNANt_Id" int); +CREATE TABLE "CiTUS.TEEN2"."CAPITAL_TABLE"(i int, j int); +-- create distributed table with weird names +SELECT create_distributed_table('"CiTuS.TeeN"."TeeNTabLE.1!?!"', 'TeNANt_Id'); + create_distributed_table +-------------------------- + +(1 row) + +SELECT create_distributed_table('"CiTUS.TEEN2"."CAPITAL_TABLE"', 'i'); + create_distributed_table +-------------------------- + +(1 row) + +-- insert into table with weird names +INSERT INTO "CiTuS.TeeN"."TeeNTabLE.1!?!" VALUES(1, 1),(1, 0),(0, 1),(2, 3),(3, 2),(4, 4); +INSERT INTO "CiTUS.TEEN2"."CAPITAL_TABLE" VALUES(0, 1),(1, 0),(2, 1),(4, 3),(3, 2),(4, 4); +-- join on tables with weird names +SELECT * +FROM "CiTuS.TeeN"."TeeNTabLE.1!?!", "CiTUS.TEEN2"."CAPITAL_TABLE" +WHERE "CiTUS.TEEN2"."CAPITAL_TABLE".i = "CiTuS.TeeN"."TeeNTabLE.1!?!"."TeNANt_Id" +ORDER BY 1,2,3,4; + id | TeNANt_Id | i | j +----+-----------+---+--- + 0 | 1 | 1 | 0 + 1 | 0 | 0 | 1 + 1 | 1 | 1 | 0 + 2 | 3 | 3 | 2 + 3 | 2 | 2 | 1 + 4 | 4 | 4 | 3 + 4 | 4 | 4 | 4 +(7 rows) + +-- add group by, having, order by clauses +SELECT * +FROM "CiTuS.TeeN"."TeeNTabLE.1!?!", "CiTUS.TEEN2"."CAPITAL_TABLE" +WHERE "CiTUS.TEEN2"."CAPITAL_TABLE".i = "CiTuS.TeeN"."TeeNTabLE.1!?!"."TeNANt_Id" +GROUP BY "TeNANt_Id", id, i, j +HAVING "TeNANt_Id" > 0 AND j >= id ORDER BY "TeNANt_Id"; + id | TeNANt_Id | i | j +----+-----------+---+--- + 0 | 1 | 1 | 0 + 2 | 3 | 3 | 2 + 4 | 4 | 4 | 4 +(3 rows) + +SELECT * +FROM "CiTuS.TeeN"."TeeNTabLE.1!?!" join "CiTUS.TEEN2"."CAPITAL_TABLE" on +("CiTUS.TEEN2"."CAPITAL_TABLE".i = "CiTuS.TeeN"."TeeNTabLE.1!?!"."TeNANt_Id") +GROUP BY "TeNANt_Id", id, i, j +HAVING "TeNANt_Id" > 0 AND j >= id +ORDER BY 1,2,3,4; + id | TeNANt_Id | i | j +----+-----------+---+--- + 0 | 1 | 1 | 0 + 2 | 3 | 3 | 2 + 4 | 4 | 4 | 4 +(3 rows) + +-- run with CTEs +WITH "cTE" AS ( + SELECT * + FROM "CiTuS.TeeN"."TeeNTabLE.1!?!" +) +SELECT * FROM "cTE" join "CiTUS.TEEN2"."CAPITAL_TABLE" on +("cTE"."TeNANt_Id" = "CiTUS.TEEN2"."CAPITAL_TABLE".i) +GROUP BY "TeNANt_Id", id, i, j +HAVING "TeNANt_Id" > 0 AND j >= id +ORDER BY 1,2,3,4; + id | TeNANt_Id | i | j +----+-----------+---+--- + 0 | 1 | 1 | 0 + 2 | 3 | 3 | 2 + 4 | 4 | 4 | 4 +(3 rows) + +SET search_path to "CiTuS.TeeN"; +-- and subqueries +SELECT * +FROM ( + SELECT * + FROM "TeeNTabLE.1!?!" + ) "cTE" +join "CiTUS.TEEN2"."CAPITAL_TABLE" on +("cTE"."TeNANt_Id" = "CiTUS.TEEN2"."CAPITAL_TABLE".i) +GROUP BY "TeNANt_Id", id, i, j +HAVING "TeNANt_Id" > 0 AND j >= id +ORDER BY 1,2,3,4; + id | TeNANt_Id | i | j +----+-----------+---+--- + 0 | 1 | 1 | 0 + 2 | 3 | 3 | 2 + 4 | 4 | 4 | 4 +(3 rows) + +SET search_path to default; +-- Some DDL +ALTER TABLE "CiTuS.TeeN"."TeeNTabLE.1!?!" ADD COLUMN "NEW_TeeN:COl" text; +-- Some DML +DELETE FROM "CiTuS.TeeN"."TeeNTabLE.1!?!" WHERE "TeNANt_Id"=1; +-- Some more DDL +ALTER TABLE "CiTuS.TeeN"."TeeNTabLE.1!?!" ADD CONSTRAINT "ConsNAmE<>" PRIMARY KEY ("TeNANt_Id"); -- Clean up the created schema DROP SCHEMA run_test_schema CASCADE; NOTICE: drop cascades to table run_test_schema.test_table @@ -1099,3 +1208,7 @@ DETAIL: drop cascades to table test_schema_support_join_1.nation_hash drop cascades to table test_schema_support_join_1.nation_hash_2 DROP SCHEMA test_schema_support_join_2 CASCADE; NOTICE: drop cascades to table test_schema_support_join_2.nation_hash +DROP SCHEMA "CiTuS.TeeN" CASCADE; +NOTICE: drop cascades to table "CiTuS.TeeN"."TeeNTabLE.1!?!" +DROP SCHEMA "CiTUS.TEEN2" CASCADE; +NOTICE: drop cascades to table "CiTUS.TEEN2"."CAPITAL_TABLE" diff --git a/src/test/regress/sql/multi_schema_support.sql b/src/test/regress/sql/multi_schema_support.sql index 1fc2251dc..d28e42b7f 100644 --- a/src/test/regress/sql/multi_schema_support.sql +++ b/src/test/regress/sql/multi_schema_support.sql @@ -780,7 +780,81 @@ INSERT INTO run_test_schema.test_table VALUES(9); SELECT sum(result::int) FROM run_command_on_placements('run_test_schema.test_table','SELECT pg_table_size(''%s'')'); SELECT sum(result::int) FROM run_command_on_shards('run_test_schema.test_table','SELECT pg_table_size(''%s'')'); +-- test capital letters on both table and schema names +SET citus.task_executor_type to "real-time"; +-- create schema with weird names +CREATE SCHEMA "CiTuS.TeeN"; +CREATE SCHEMA "CiTUS.TEEN2"; + +-- create table with weird names +CREATE TABLE "CiTuS.TeeN"."TeeNTabLE.1!?!"(id int, "TeNANt_Id" int); +CREATE TABLE "CiTUS.TEEN2"."CAPITAL_TABLE"(i int, j int); + +-- create distributed table with weird names +SELECT create_distributed_table('"CiTuS.TeeN"."TeeNTabLE.1!?!"', 'TeNANt_Id'); +SELECT create_distributed_table('"CiTUS.TEEN2"."CAPITAL_TABLE"', 'i'); + +-- insert into table with weird names +INSERT INTO "CiTuS.TeeN"."TeeNTabLE.1!?!" VALUES(1, 1),(1, 0),(0, 1),(2, 3),(3, 2),(4, 4); +INSERT INTO "CiTUS.TEEN2"."CAPITAL_TABLE" VALUES(0, 1),(1, 0),(2, 1),(4, 3),(3, 2),(4, 4); + +-- join on tables with weird names +SELECT * +FROM "CiTuS.TeeN"."TeeNTabLE.1!?!", "CiTUS.TEEN2"."CAPITAL_TABLE" +WHERE "CiTUS.TEEN2"."CAPITAL_TABLE".i = "CiTuS.TeeN"."TeeNTabLE.1!?!"."TeNANt_Id" +ORDER BY 1,2,3,4; + +-- add group by, having, order by clauses +SELECT * +FROM "CiTuS.TeeN"."TeeNTabLE.1!?!", "CiTUS.TEEN2"."CAPITAL_TABLE" +WHERE "CiTUS.TEEN2"."CAPITAL_TABLE".i = "CiTuS.TeeN"."TeeNTabLE.1!?!"."TeNANt_Id" +GROUP BY "TeNANt_Id", id, i, j +HAVING "TeNANt_Id" > 0 AND j >= id ORDER BY "TeNANt_Id"; + +SELECT * +FROM "CiTuS.TeeN"."TeeNTabLE.1!?!" join "CiTUS.TEEN2"."CAPITAL_TABLE" on +("CiTUS.TEEN2"."CAPITAL_TABLE".i = "CiTuS.TeeN"."TeeNTabLE.1!?!"."TeNANt_Id") +GROUP BY "TeNANt_Id", id, i, j +HAVING "TeNANt_Id" > 0 AND j >= id +ORDER BY 1,2,3,4; + +-- run with CTEs +WITH "cTE" AS ( + SELECT * + FROM "CiTuS.TeeN"."TeeNTabLE.1!?!" +) +SELECT * FROM "cTE" join "CiTUS.TEEN2"."CAPITAL_TABLE" on +("cTE"."TeNANt_Id" = "CiTUS.TEEN2"."CAPITAL_TABLE".i) +GROUP BY "TeNANt_Id", id, i, j +HAVING "TeNANt_Id" > 0 AND j >= id +ORDER BY 1,2,3,4; + +SET search_path to "CiTuS.TeeN"; +-- and subqueries +SELECT * +FROM ( + SELECT * + FROM "TeeNTabLE.1!?!" + ) "cTE" +join "CiTUS.TEEN2"."CAPITAL_TABLE" on +("cTE"."TeNANt_Id" = "CiTUS.TEEN2"."CAPITAL_TABLE".i) +GROUP BY "TeNANt_Id", id, i, j +HAVING "TeNANt_Id" > 0 AND j >= id +ORDER BY 1,2,3,4; + +SET search_path to default; +-- Some DDL +ALTER TABLE "CiTuS.TeeN"."TeeNTabLE.1!?!" ADD COLUMN "NEW_TeeN:COl" text; + +-- Some DML +DELETE FROM "CiTuS.TeeN"."TeeNTabLE.1!?!" WHERE "TeNANt_Id"=1; + +-- Some more DDL +ALTER TABLE "CiTuS.TeeN"."TeeNTabLE.1!?!" ADD CONSTRAINT "ConsNAmE<>" PRIMARY KEY ("TeNANt_Id"); + -- Clean up the created schema DROP SCHEMA run_test_schema CASCADE; DROP SCHEMA test_schema_support_join_1 CASCADE; DROP SCHEMA test_schema_support_join_2 CASCADE; +DROP SCHEMA "CiTuS.TeeN" CASCADE; +DROP SCHEMA "CiTUS.TEEN2" CASCADE;