Coercing a core::value to another using odbc_native::sqlDataType
Posted: 25 Sep 2015 10:41
Hi,
I have a problem of transferring data from one odcbc-complilant database to another where the field types are known to be similar but not identical. I'm thinking of a function defined as follows:-
What would be the best way of implementing it? I'm thinking of 2 approaches: brutal force and value2String.
The brutal force approach uses the fact that there are 12 codes of sql data types, viz.,
and there are 17 possible types of data sources as defined by the core::value domain, viz.,
So I have 12*17=204 matches to make which I think is way too much.
The value2String method goes something like ...
Before I get bogged down with implementing the str_value predicate I would like to find out if there are better ways of achieving the intended result than these thoughts.
I have a problem of transferring data from one odcbc-complilant database to another where the field types are known to be similar but not identical. I'm thinking of a function defined as follows:-
Code: Select all
coerce:(core::value SourceData, odbc_native::sqlDataType DestinationType)->core::value CoercedValue
The brutal force approach uses the fact that there are 12 codes of sql data types, viz.,
Code: Select all
sql_unknown_type : sqlDataType = 0.
sql_char : sqlDataType = 1.
sql_numeric : sqlDataType = 2.
sql_decimal : sqlDataType = 3.
sql_integer : sqlDataType = 4.
sql_smallint : sqlDataType = 5.
sql_float : sqlDataType = 6.
sql_real : sqlDataType = 7.
sql_double : sqlDataType = 8.
sql_datetime : sqlDataType = 9.
sql_varchar : sqlDataType = 12.
Code: Select all
value =
none();
boolean(boolean Value);
unsigned64(unsigned64 Value);
integer64(integer64 Value);
unsigned(unsigned Value);
integer(integer Value);
real(real Value);
char(char Value);
string(string Value);
string8(string8 Value);
binary(binary Value);
binaryNonAtomic(binaryNonAtomic Value);
object(object Value);
gmtTimeValue(gmtTimeValue Value);
localTimeValue(localTimeValue Value);
pointer(pointer Value);
handle(handle Value).
The value2String method goes something like ...
Code: Select all
clauses
coerce(Source, Type)=str_value(Str, Type):-
core::value2String(Source)=Str.
Before I get bogged down with implementing the str_value predicate I would like to find out if there are better ways of achieving the intended result than these thoughts.