diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2012-09-04 11:22:07 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2012-09-04 11:22:07 +0200 |
commit | c1877f84f3596f67245abe6658b08c050bd1e686 (patch) | |
tree | 57ae8ba5818a752abc763b1510b296a4a46d1ad4 /odb/relational/mssql | |
parent | e288ee241317773c77d954c8c286f53a963e7c19 (diff) |
NULL handling improvements
Add support for specifying NULL-ness for types with built-in mapping.
Handle Oracle [N]VARCHAR2 and SQLite FLOAT oddities using this mechanism
instead of overriding it at the schema generation level.
Also use the is_null argument that is passed to value_traits::init_image()
to indicate whether the value can be NULL.
Diffstat (limited to 'odb/relational/mssql')
-rw-r--r-- | odb/relational/mssql/context.cxx | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/odb/relational/mssql/context.cxx b/odb/relational/mssql/context.cxx index efd8f2f..df6d6fc 100644 --- a/odb/relational/mssql/context.cxx +++ b/odb/relational/mssql/context.cxx @@ -20,43 +20,44 @@ namespace relational { struct type_map_entry { - const char* const cxx_type; - const char* const db_type; - const char* const db_id_type; + char const* const cxx_type; + char const* const db_type; + char const* const db_id_type; + bool const null; }; type_map_entry type_map[] = { - {"bool", "BIT", 0}, + {"bool", "BIT", 0, false}, - {"char", "TINYINT", 0}, - {"signed char", "TINYINT", 0}, - {"unsigned char", "TINYINT", 0}, + {"char", "TINYINT", 0, false}, + {"signed char", "TINYINT", 0, false}, + {"unsigned char", "TINYINT", 0, false}, - {"short int", "SMALLINT", 0}, - {"short unsigned int", "SMALLINT", 0}, + {"short int", "SMALLINT", 0, false}, + {"short unsigned int", "SMALLINT", 0, false}, - {"int", "INT", 0}, - {"unsigned int", "INT", 0}, + {"int", "INT", 0, false}, + {"unsigned int", "INT", 0, false}, - {"long int", "BIGINT", 0}, - {"long unsigned int", "BIGINT", 0}, + {"long int", "BIGINT", 0, false}, + {"long unsigned int", "BIGINT", 0, false}, - {"long long int", "BIGINT", 0}, - {"long long unsigned int", "BIGINT", 0}, + {"long long int", "BIGINT", 0, false}, + {"long long unsigned int", "BIGINT", 0, false}, - {"float", "REAL", 0}, - {"double", "FLOAT", 0}, + {"float", "REAL", 0, false}, + {"double", "FLOAT", 0, false}, - {"::std::string", "VARCHAR(512)", "VARCHAR(256)"}, - {"::std::wstring", "NVARCHAR(512)", "NVARCHAR(256)"}, + {"::std::string", "VARCHAR(512)", "VARCHAR(256)", false}, + {"::std::wstring", "NVARCHAR(512)", "NVARCHAR(256)", false}, - {"::size_t", "BIGINT", 0}, - {"::std::size_t", "BIGINT", 0}, + {"::size_t", "BIGINT", 0, false}, + {"::std::size_t", "BIGINT", 0, false}, // Windows GUID/UUID (typedef struct _GUID {...} GUID, UUID;). // - {"::_GUID", "UNIQUEIDENTIFIER", 0} + {"::_GUID", "UNIQUEIDENTIFIER", 0, false} }; } @@ -97,7 +98,8 @@ namespace relational type_map_type::value_type v ( e.cxx_type, - db_type_type (e.db_type, e.db_id_type ? e.db_id_type : e.db_type)); + db_type_type ( + e.db_type, e.db_id_type ? e.db_id_type : e.db_type, e.null)); data_->type_map_.insert (v); } |