Skip to content

Commit

Permalink
UUID datatype support for postgres driver (fix #157)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexbruy authored and wonder-sk committed Jul 11, 2022
1 parent a0cf71a commit 15bbf73
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 5 deletions.
2 changes: 1 addition & 1 deletion geodiff/src/drivers/postgresdriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down
2 changes: 1 addition & 1 deletion geodiff/src/tableschema.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
16 changes: 15 additions & 1 deletion geodiff/tests/test_driver_postgres.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,16 +134,18 @@ 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 );
ASSERT_EQ( sch.columns[0].isAutoIncrement, true );
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 );
Expand All @@ -155,32 +157,44 @@ 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 );
ASSERT_EQ( sch.columns[2].isAutoIncrement, false );
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 );
ASSERT_EQ( sch.columns[3].isAutoIncrement, false );
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 );
ASSERT_EQ( sch.columns[4].isAutoIncrement, false );
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 )
Expand Down
15 changes: 13 additions & 2 deletions geodiff/tests/testdata/postgres/datatypes.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

DROP SCHEMA IF EXISTS gd_datatypes CASCADE;

CREATE SCHEMA gd_datatypes;
Expand All @@ -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',
Expand Down

0 comments on commit 15bbf73

Please sign in to comment.