aboutsummaryrefslogtreecommitdiff
path: root/odb/relational/oracle/context.hxx
diff options
context:
space:
mode:
authorConstantin Michael <constantin@codesynthesis.com>2011-09-29 16:03:54 +0200
committerConstantin Michael <constantin@codesynthesis.com>2011-10-21 11:47:11 +0200
commit03fbd42bd45c30875f1a5c3c52062550e4a8a7f9 (patch)
tree990b848b0acb6496582bb90f8cdd1d6cdd0a10f5 /odb/relational/oracle/context.hxx
parent16b43575a7a7bc02a61862ad4c1db5434d3b1d68 (diff)
Implement SQL type parsing and C++ type mappings for Oracle
Diffstat (limited to 'odb/relational/oracle/context.hxx')
-rw-r--r--odb/relational/oracle/context.hxx107
1 files changed, 107 insertions, 0 deletions
diff --git a/odb/relational/oracle/context.hxx b/odb/relational/oracle/context.hxx
new file mode 100644
index 0000000..c5e49c0
--- /dev/null
+++ b/odb/relational/oracle/context.hxx
@@ -0,0 +1,107 @@
+// file : odb/relational/oracle/context.hxx
+// author : Constantin Michael <constantin@codesynthesis.com>
+// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+// license : ODB NCUEL; see accompanying LICENSE file
+
+#ifndef ODB_RELATIONAL_ORACLE_CONTEXT_HXX
+#define ODB_RELATIONAL_ORACLE_CONTEXT_HXX
+
+#include <vector>
+
+#include <odb/relational/context.hxx>
+
+namespace relational
+{
+ namespace oracle
+ {
+ struct sql_type
+ {
+ // Keep the order in each block of types.
+ //
+ enum core_type
+ {
+ // Numeric types.
+ //
+ NUMBER,
+ FLOAT,
+
+ // Floating point types.
+ //
+ BINARY_FLOAT,
+ BINARY_DOUBLE,
+
+ // Data-time types.
+ //
+ DATE,
+ TIMESTAMP,
+
+ // String and binary types.
+ //
+ CHAR,
+ NCHAR,
+ VARCHAR2,
+ NVARCHAR2,
+ RAW,
+
+ // LOB types.
+ //
+ BLOB,
+ CLOB,
+ NCLOB,
+
+ // Invalid type.
+ //
+ invalid
+ };
+
+ sql_type () :
+ type (invalid), range (false), scale (false), byte_semantics (true)
+ {
+ }
+
+ core_type type;
+ bool range;
+ unsigned short range_value; // Oracle max value is 4000.
+ bool scale;
+ short scale_value; // Oracle min value is -84. Max value is 127.
+ bool byte_semantics;
+ };
+
+ class context: public virtual relational::context
+ {
+ public:
+ sql_type const&
+ column_sql_type (semantics::data_member&,
+ string const& key_prefix = string ());
+
+ protected:
+ virtual string
+ database_type_impl (semantics::type&, semantics::names*, bool);
+
+ public:
+ virtual
+ ~context ();
+
+ context ();
+ context (std::ostream&, semantics::unit&, options_type const&);
+
+ static context&
+ current ()
+ {
+ return *current_;
+ }
+
+ private:
+ static context* current_;
+
+ private:
+ struct data: base_context::data
+ {
+ data (std::ostream& os): base_context::data (os) {}
+ };
+ data* data_;
+ };
+ }
+}
+
+#endif // ODB_RELATIONAL_ORACLE_CONTEXT_HXX