diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2012-01-12 09:28:06 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2012-01-20 15:43:46 +0200 |
commit | 06b889850144910f1f908fc87f78114bde920596 (patch) | |
tree | 451bb55a04a83cbacecf21f67e671dc8124f7cf9 /odb/relational/mssql/common.cxx | |
parent | 0ed8f3b5e49c5b9f9247cfc28aadb37d892ed39b (diff) |
Query support for SQL Server
Diffstat (limited to 'odb/relational/mssql/common.cxx')
-rw-r--r-- | odb/relational/mssql/common.cxx | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/odb/relational/mssql/common.cxx b/odb/relational/mssql/common.cxx index f9c89e0..3112c2d 100644 --- a/odb/relational/mssql/common.cxx +++ b/odb/relational/mssql/common.cxx @@ -550,6 +550,84 @@ namespace relational return member_database_type_id_.database_type_id (m); } + virtual void + column_ctor_extra (semantics::data_member& m) + { + // For some types we need to pass precision and scale. + // + sql_type const& st (column_sql_type (m)); + + switch (st.type) + { + case sql_type::DECIMAL: + { + os << ", " << st.prec << ", " << st.scale; + break; + } + case sql_type::FLOAT: + { + os << ", " << st.prec; + break; + } + case sql_type::CHAR: + case sql_type::VARCHAR: + { + os << ", " << st.prec; + break; + } + case sql_type::TEXT: + { + os << ", 0"; // Unlimited. + break; + } + case sql_type::NCHAR: + case sql_type::NVARCHAR: + { + os << ", " << st.prec; // In 2-byte characters. + break; + } + case sql_type::NTEXT: + { + os << ", 0"; // Unlimited. + break; + } + case sql_type::BINARY: + case sql_type::VARBINARY: + { + os << ", " << st.prec; + break; + } + case sql_type::IMAGE: + { + os << ", 0"; // Unlimited. + break; + } + // Date-time types. + // + case sql_type::TIME: + case sql_type::DATETIME2: + case sql_type::DATETIMEOFFSET: + { + os << ", 0, " << st.scale; // Fractional seconds (scale). + break; + } + case sql_type::DATETIME: + { + os << ", 0, 3"; + break; + } + case sql_type::SMALLDATETIME: + { + os << ", 0, 8"; + break; + } + default: + { + break; + } + } + } + private: member_database_type_id member_database_type_id_; }; |