From 70492a2ffe88a8ba8393a895eee7716778bec84a Mon Sep 17 00:00:00 2001 From: Constantin Michael Date: Mon, 7 Nov 2011 15:15:27 +0200 Subject: Add support for Oracle INTERVAL temporal types --- odb/relational/oracle/source.cxx | 72 ++++++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 13 deletions(-) (limited to 'odb/relational/oracle/source.cxx') diff --git a/odb/relational/oracle/source.cxx b/odb/relational/oracle/source.cxx index 0c40bab..c3d4f59 100644 --- a/odb/relational/oracle/source.cxx +++ b/odb/relational/oracle/source.cxx @@ -264,10 +264,29 @@ namespace relational traverse_timestamp (member_info& mi) { os << b << ".type = oracle::bind::timestamp;" - << b << ".buffer = " << arg << "." << mi.var << "value;" - << b << ".capacity = static_cast (sizeof (" << arg << "." << - mi.var << "value));" - << b << ".size = &" << arg << "." << mi.var << "size;" + << b << ".buffer = &" << arg << "." << mi.var << "value;" + << b << ".capacity = sizeof (OCIDateTime*);" + << b << ".size = 0;" + << b << ".indicator = &" << arg << "." << mi.var << "indicator;"; + } + + virtual void + traverse_interval_ym (member_info& mi) + { + os << b << ".type = oracle::bind::interval_ym;" + << b << ".buffer = &" << arg << "." << mi.var << "value;" + << b << ".capacity = sizeof (OCIInterval*);" + << b << ".size = 0;" + << b << ".indicator = &" << arg << "." << mi.var << "indicator;"; + } + + virtual void + traverse_interval_ds (member_info& mi) + { + os << b << ".type = oracle::bind::interval_ds;" + << b << ".buffer = &" << arg << "." << mi.var << "value;" + << b << ".capacity = sizeof (OCIInterval*);" + << b << ".size = 0;" << b << ".indicator = &" << arg << "." << mi.var << "indicator;"; } @@ -542,14 +561,22 @@ namespace relational virtual void traverse_timestamp (member_info& mi) { - os << "std::size_t size (0);" - << traits << "::set_image (" << endl - << "i." << mi.var << "value," << endl - << "sizeof (i." << mi.var << "value)," << endl - << "size," << endl - << "is_null," << endl - << member << ");" - << "i." << mi.var << "size = static_cast (size);"; + os << traits << "::set_image (" << endl + << "i." << mi.var << "value, is_null," << member << ");"; + } + + virtual void + traverse_interval_ym (member_info& mi) + { + os << traits << "::set_image (" << endl + << "i." << mi.var << "value, is_null," << member << ");"; + } + + virtual void + traverse_interval_ds (member_info& mi) + { + os << traits << "::set_image (" << endl + << "i." << mi.var << "value, is_null," << member << ");"; } virtual void @@ -822,7 +849,26 @@ namespace relational os << traits << "::set_value (" << endl << member << "," << endl << "i." << mi.var << "value," << endl - << "i." << mi.var << "size," << endl + << "i." << mi.var << "indicator == -1);" + << endl; + } + + virtual void + traverse_interval_ym (member_info& mi) + { + os << traits << "::set_value (" << endl + << member << "," << endl + << "i." << mi.var << "value," << endl + << "i." << mi.var << "indicator == -1);" + << endl; + } + + virtual void + traverse_interval_ds (member_info& mi) + { + os << traits << "::set_value (" << endl + << member << "," << endl + << "i." << mi.var << "value," << endl << "i." << mi.var << "indicator == -1);" << endl; } -- cgit v1.1