Merge pull request #168 from CartoDB/148-cartodbfy-checks-for-null-cartodb-id

148 cartodbfy checks for null cartodb id
This commit is contained in:
Rafa de la Torre 2015-10-06 14:39:00 +02:00
commit 15dd4935d6
3 changed files with 71 additions and 6 deletions

View File

@ -362,7 +362,7 @@ $$ LANGUAGE PLPGSQL;
-- As before, this drops all the metadata and geom sync triggers -- As before, this drops all the metadata and geom sync triggers
-- --
-- (2) _CDB_Has_Usable_Primary_ID() -- (2) _CDB_Has_Usable_Primary_ID()
-- Returns TRUE if it can find a unique integer primary key named -- Returns TRUE if it can find a unique and not null integer primary key named
-- 'cartodb_id' or can rename an existing key. -- 'cartodb_id' or can rename an existing key.
-- Returns FALSE otherwise. -- Returns FALSE otherwise.
-- --
@ -551,7 +551,7 @@ BEGIN
RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', Format('found good ''%s''', const.pkey); RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', Format('found good ''%s''', const.pkey);
RETURN true; RETURN true;
-- Check and see if the column values are unique, -- Check and see if the column values are unique and not null,
-- if they are, we can use this column... -- if they are, we can use this column...
ELSE ELSE
@ -559,13 +559,17 @@ BEGIN
useable_key := true; useable_key := true;
BEGIN BEGIN
sql := Format('ALTER TABLE %s ADD CONSTRAINT %s_unique UNIQUE (%s)', reloid::text, const.pkey, const.pkey); sql := Format('ALTER TABLE %s ADD CONSTRAINT %s_pk PRIMARY KEY (%s)', reloid::text, const.pkey, const.pkey);
RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', sql; RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', sql;
EXECUTE sql; EXECUTE sql;
EXCEPTION EXCEPTION
-- Failed unique check... -- Failed unique check...
WHEN unique_violation THEN WHEN unique_violation THEN
RAISE NOTICE 'CDB(_CDB_Has_Usable_Primary_ID): %', Format('column %s is not unique', const.pkey); RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', Format('column %s is not unique', const.pkey);
useable_key := false;
-- Failed not null check...
WHEN not_null_violation THEN
RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', Format('column %s contains nulls', const.pkey);
useable_key := false; useable_key := false;
-- Other fatal error -- Other fatal error
WHEN others THEN WHEN others THEN
@ -574,7 +578,7 @@ BEGIN
-- Clean up test constraint -- Clean up test constraint
IF useable_key THEN IF useable_key THEN
PERFORM _CDB_SQL(Format('ALTER TABLE %s DROP CONSTRAINT %s_unique', reloid::text, const.pkey)); PERFORM _CDB_SQL(Format('ALTER TABLE %s DROP CONSTRAINT %s_pk', reloid::text, const.pkey));
-- Move non-unique column out of the way -- Move non-unique column out of the way
ELSE ELSE

View File

@ -250,7 +250,7 @@ INSERT INTO existing_cartodb_id (cartodb_id, description) VALUES
(20, 'b'), (20, 'b'),
(30, 'c'); (30, 'c');
SELECT CDB_CartodbfyTableCheck('existing_cartodb_id', 'Existing cartodb_id values are respected #138'); SELECT CDB_CartodbfyTableCheck('existing_cartodb_id', 'Existing cartodb_id values are respected #138');
SELECT * from existing_cartodb_id; SELECT cartodb_id,the_geom,the_geom_webmercator,description,name from existing_cartodb_id;
DROP TABLE existing_cartodb_id; DROP TABLE existing_cartodb_id;
-- Table with both the_geom and wkb_geometry -- Table with both the_geom and wkb_geometry
@ -281,6 +281,44 @@ INSERT INTO many_colliding_columns VALUES (
SELECT CDB_CartodbfyTableCheck('many_colliding_columns', 'Many colliding columns #141'); SELECT CDB_CartodbfyTableCheck('many_colliding_columns', 'Many colliding columns #141');
DROP TABLE many_colliding_columns; DROP TABLE many_colliding_columns;
-- Table with null cartodb_id
CREATE TABLE test (
cartodb_id integer
);
INSERT INTO test VALUES
(1),
(2),
(NULL),
(3);
SELECT CDB_CartodbfyTableCheck('test', 'Table with null cartodb_id #148');
SELECT cartodb_id, cartodb_id_1 from test;
DROP TABLE test;
-- Table with non unique cartodb_id
CREATE TABLE test (
cartodb_id integer
);
INSERT INTO test VALUES
(1),
(2),
(2);
SELECT CDB_CartodbfyTableCheck('test', 'Table with non unique cartodb_id #148');
SELECT cartodb_id, cartodb_id_1 from test;
DROP TABLE test;
-- Table with non unique and null cartodb_id
CREATE TABLE test (
cartodb_id integer
);
INSERT INTO test VALUES
(1),
(2),
(NULL),
(2);
SELECT CDB_CartodbfyTableCheck('test', 'Table with non unique and null cartodb_id #148');
SELECT cartodb_id, cartodb_id_1 from test;
DROP TABLE test;
-- TODO: table with existing custom-triggered the_geom -- TODO: table with existing custom-triggered the_geom

View File

@ -79,5 +79,28 @@ CREATE TABLE
INSERT 0 1 INSERT 0 1
Many colliding columns #141 cartodbfied fine Many colliding columns #141 cartodbfied fine
DROP TABLE DROP TABLE
CREATE TABLE
INSERT 0 4
Table with null cartodb_id #148 cartodbfied fine
1|1
2|2
3|
4|3
DROP TABLE
CREATE TABLE
INSERT 0 3
Table with non unique cartodb_id #148 cartodbfied fine
1|1
2|2
3|2
DROP TABLE
CREATE TABLE
INSERT 0 4
Table with non unique and null cartodb_id #148 cartodbfied fine
1|1
2|2
3|
4|2
DROP TABLE
DROP FUNCTION DROP FUNCTION
DROP FUNCTION DROP FUNCTION