diff --git a/geodiff/src/drivers/postgresdriver.cpp b/geodiff/src/drivers/postgresdriver.cpp index f9060c3..f72a6ca 100644 --- a/geodiff/src/drivers/postgresdriver.cpp +++ b/geodiff/src/drivers/postgresdriver.cpp @@ -480,7 +480,7 @@ static bool isColumnText( const TableColumnInfo &col ) col.type == "varchar" || startsWith( col.type.dbType, "varchar(" ) || col.type == "character varying" || startsWith( col.type.dbType, "character varying(" ) || col.type == "char" || startsWith( col.type.dbType, "char(" ) || startsWith( col.type.dbType, "character(" ) || - col.type == "citext"; + col.type == "citext" || col.type == "uuid"; } static bool isColumnGeometry( const TableColumnInfo &col ) diff --git a/geodiff/src/tableschema.cpp b/geodiff/src/tableschema.cpp index 381c265..62bee1d 100644 --- a/geodiff/src/tableschema.cpp +++ b/geodiff/src/tableschema.cpp @@ -122,7 +122,7 @@ TableColumnType postgresToBaseColumn( dbType == "varchar" || startsWith( dbType, "varchar(" ) || dbType == "character varying" || startsWith( dbType, "character varying(" ) || dbType == "char" || startsWith( dbType, "char(" ) || startsWith( dbType, "character(" ) || - dbType == "citetext" ) + dbType == "citetext" || dbType == "uuid" ) { type.baseType = TableColumnType::TEXT; } diff --git a/geodiff/tests/test_driver_postgres.cpp b/geodiff/tests/test_driver_postgres.cpp index 7989cec..0fe438f 100644 --- a/geodiff/tests/test_driver_postgres.cpp +++ b/geodiff/tests/test_driver_postgres.cpp @@ -134,9 +134,10 @@ TEST( PostgresDriverTest, test_datatypes ) TableSchema sch = driver->tableSchema( "simple" ); ASSERT_EQ( sch.name, "simple" ); - ASSERT_EQ( sch.columns.size(), 6 ); + ASSERT_EQ( sch.columns.size(), 7 ); ASSERT_EQ( sch.columns[0].name, "fid" ); + ASSERT_EQ( sch.columns[0].type.baseType, TableColumnType::INTEGER ); ASSERT_EQ( sch.columns[0].type.dbType, "integer" ); ASSERT_EQ( sch.columns[0].isPrimaryKey, true ); ASSERT_EQ( sch.columns[0].isNotNull, true ); @@ -144,6 +145,7 @@ TEST( PostgresDriverTest, test_datatypes ) ASSERT_EQ( sch.columns[0].isGeometry, false ); ASSERT_EQ( sch.columns[1].name, "geometry" ); + ASSERT_EQ( sch.columns[1].type.baseType, TableColumnType::GEOMETRY ); ASSERT_EQ( sch.columns[1].type.dbType, "geometry(Point,4326)" ); ASSERT_EQ( sch.columns[1].isPrimaryKey, false ); ASSERT_EQ( sch.columns[1].isNotNull, false ); @@ -155,6 +157,7 @@ TEST( PostgresDriverTest, test_datatypes ) ASSERT_EQ( sch.columns[1].geomHasM, false ); ASSERT_EQ( sch.columns[2].name, "name_text" ); + ASSERT_EQ( sch.columns[2].type.baseType, TableColumnType::TEXT ); ASSERT_EQ( sch.columns[2].type.dbType, "text" ); ASSERT_EQ( sch.columns[2].isPrimaryKey, false ); ASSERT_EQ( sch.columns[2].isNotNull, false ); @@ -162,6 +165,7 @@ TEST( PostgresDriverTest, test_datatypes ) ASSERT_EQ( sch.columns[2].isGeometry, false ); ASSERT_EQ( sch.columns[3].name, "name_varchar" ); + ASSERT_EQ( sch.columns[3].type, TableColumnType::TEXT ); ASSERT_EQ( sch.columns[3].type.dbType, "character varying" ); ASSERT_EQ( sch.columns[3].isPrimaryKey, false ); ASSERT_EQ( sch.columns[3].isNotNull, false ); @@ -169,6 +173,7 @@ TEST( PostgresDriverTest, test_datatypes ) ASSERT_EQ( sch.columns[3].isGeometry, false ); ASSERT_EQ( sch.columns[4].name, "name_varchar_len" ); + ASSERT_EQ( sch.columns[4].type.baseType, TableColumnType::TEXT ); ASSERT_EQ( sch.columns[4].type.dbType, "character varying(50)" ); ASSERT_EQ( sch.columns[4].isPrimaryKey, false ); ASSERT_EQ( sch.columns[4].isNotNull, false ); @@ -176,11 +181,20 @@ TEST( PostgresDriverTest, test_datatypes ) ASSERT_EQ( sch.columns[4].isGeometry, false ); ASSERT_EQ( sch.columns[5].name, "name_char_len" ); + ASSERT_EQ( sch.columns[5].type.baseType, TableColumnType::TEXT ); ASSERT_EQ( sch.columns[5].type.dbType, "character(100)" ); ASSERT_EQ( sch.columns[5].isPrimaryKey, false ); ASSERT_EQ( sch.columns[5].isNotNull, false ); ASSERT_EQ( sch.columns[5].isAutoIncrement, false ); ASSERT_EQ( sch.columns[5].isGeometry, false ); + + ASSERT_EQ( sch.columns[6].name, "feature_id" ); + ASSERT_EQ( sch.columns[6].type.baseType, TableColumnType::TEXT ); + ASSERT_EQ( sch.columns[6].type.dbType, "uuid" ); + ASSERT_EQ( sch.columns[6].isPrimaryKey, false ); + ASSERT_EQ( sch.columns[6].isNotNull, false ); + ASSERT_EQ( sch.columns[6].isAutoIncrement, false ); + ASSERT_EQ( sch.columns[6].isGeometry, false ); } void testCreateChangeset( const std::string &testname, const std::string &conninfo, const std::string &schemaBase, const std::string &schemaModified, const std::string &expectedChangeset ) diff --git a/geodiff/tests/testdata/postgres/datatypes.sql b/geodiff/tests/testdata/postgres/datatypes.sql index b8c13f8..c1d6343 100644 --- a/geodiff/tests/testdata/postgres/datatypes.sql +++ b/geodiff/tests/testdata/postgres/datatypes.sql @@ -1,4 +1,6 @@ +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; + DROP SCHEMA IF EXISTS gd_datatypes CASCADE; CREATE SCHEMA gd_datatypes; @@ -9,10 +11,19 @@ CREATE TABLE gd_datatypes.simple ( "name_text" text, "name_varchar" character varying, "name_varchar_len" character varying(50), - "name_char_len" character(100) + "name_char_len" character(100), + "feature_id" uuid DEFAULT uuid_generate_v4() ); -INSERT INTO gd_datatypes.simple VALUES ( +INSERT INTO gd_datatypes.simple ( + "fid", + "geometry", + "name_text", + "name_varchar", + "name_varchar_len", + "name_char_len" +) +VALUES ( 1, ST_GeomFromText('Point (-1.08891928864569065 0.46101231190150482)', 4326), 'feature1',