%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2002-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %% %% %CopyrightEnd% %% %% -module(oracle). %% Note: This directive should only be used in test suites. -compile(export_all). %------------------------------------------------------------------------- connection_string() -> "DSN=Oracle8;UID=odbctest". %------------------------------------------------------------------------- insert_result() -> {selected,["ID","DATA"],[{"1","bar"}]}. update_result() -> {selected,["ID","DATA"],[{"1","foo"}]}. selected_ID(N, next) -> {selected,["ID"],[{integer_to_list(N)}]}; selected_ID(_, _) -> {error, driver_does_not_support_function}. selected_next_N(1)-> {selected,["ID"], [{"1"}, {"2"}, {"3"}]}; selected_next_N(2)-> {selected,["ID"], [{"4"}, {"5"}]}. selected_relative_N(_)-> {error, driver_does_not_support_function}. selected_absolute_N(_)-> {error, driver_does_not_support_function}. selected_list_rows() -> {selected,["ID", "DATA"],[["1", "bar"],["2","foo"]]}. first_list_rows() -> {error, driver_does_not_support_function}. last_list_rows() -> {error, driver_does_not_support_function}. prev_list_rows() -> {error, driver_does_not_support_function}. next_list_rows() -> {selected,["ID","DATA"],[["1","bar"]]}. %% In case we get a better oracle driver that support this some day ..... multiple_select()-> [{selected,["ID", "DATA"],[{"1", "bar"},{"2", "foo"}]}, {selected,["ID"],[{"foo"}]}]. multiple_mix()-> [{updated, 1},{updated, 1}, {selected,["ID", "DATA"],[{"1", "foobar"},{"2", "foo"}]}, {updated, 1}, {selected,["DATA"],[{"foo"}]}]. %------------------------------------------------------------------------- fixed_char_min() -> 1. fixed_char_max() -> 2000. %% Should be 255 acording to manual but empirical tests say 2000 create_fixed_char_table(Size) -> " (FIELD char(" ++ integer_to_list(Size) ++ "))". %------------------------------------------------------------------------- var_char_min() -> 1. var_char_max() -> 2000. create_var_char_table(Size) -> " (FIELD varchar2(" ++ integer_to_list(Size) ++ "))". %------------------------------------------------------------------------- text_min() -> 1. text_max() -> 2147483646. % 2147483647. %% 2^31 - 1 create_text_table() -> " (FIELD long)". %Oracle long is variable length char data %------------------------------------------------------------------------- create_timestamp_table() -> " (FIELD DATETIME)". %------------------------------------------------------------------------- tiny_int_min() -> -999. tiny_int_max() -> 999. create_tiny_int_table() -> " (FIELD number(3, 0))". tiny_int_min_selected() -> {selected,["FIELD"],[{-999}]}. tiny_int_max_selected() -> {selected,["FIELD"], [{999}]}. %------------------------------------------------------------------------- small_int_min() -> -99999. small_int_max() -> 99999. create_small_int_table() -> " (FIELD number(5, 0))". small_int_min_selected() -> {selected,["FIELD"],[{-99999}]}. small_int_max_selected() -> {selected,["FIELD"], [{99999}]}. %------------------------------------------------------------------------- int_min() -> -999999999. int_max() -> 999999999. create_int_table() -> " (FIELD number(9, 0))". int_min_selected() -> {selected,["FIELD"],[{-999999999}]}. int_max_selected() -> {selected,["FIELD"], [{999999999}]}. %------------------------------------------------------------------------- big_int_min() -> -99999999999999999999999999999999999999. big_int_max() -> 99999999999999999999999999999999999999. create_big_int_table() -> " (FIELD number(38,0))". big_int_min_selected() -> {selected,["FIELD"], [{"-99999999999999999999999999999999999999"}]}. big_int_max_selected() -> {selected,["FIELD"], [{"99999999999999999999999999999999999999"}]}. %------------------------------------------------------------------------- float_min() -> 1.40129846432481707e-45. float_max() -> 3.40282346638528860e+38. create_float_table() -> " (FIELD float(32))". float_underflow() -> "'4.94065645841246544e-324'". float_overflow() -> "'1.79769313486231570e+308'". float_zero_selected() -> {selected,["FIELD"],[{0.00000e+0}]}. %------------------------------------------------------------------------- param_select_small_int() -> {selected,["FIELD"],[{"1"}, {"2"}]}. param_select_int() -> Int = small_int_max() + 1, {selected,["FIELD"],[{"1"}, {integer_to_list(Int)}]}. param_select_decimal() -> {selected,["FIELD"],[{1},{2}]}. param_select_numeric() -> {selected,["FIELD"],[{1},{2}]}. param_select_float() -> {selected,["FIELD"],[{1.30000},{1.20000}]}. param_select_real() -> {selected,["FIELD"],[{1.30000},{1.20000}]}. param_select_double() -> {selected,["FIELD"],[{1.30000},{1.20000}]}. param_select_mix() -> {selected,["ID","DATA"],[{"1", "foo"}, {"2", "bar"}]}. param_update() -> {selected,["ID","DATA"],[{"1", "foobar"}, {"2", "foobar"}, {"3", "baz"}]}. param_delete() -> {selected,["ID","DATA"],[{"3", "baz"}]}. param_select() -> {selected,["ID","DATA"],[{"1", "foo"},{"3", "foo"}]}. %------------------------------------------------------------------------- describe_integer() -> {ok,[{"MYINT1",{sql_decimal,38,0}},{"MYINT2",{sql_decimal,38,0}}, {"MYINT3",{sql_decimal,38,0}}]}. describe_string() -> {ok,[{"STR1",{sql_char,10}}, {"STR2",{sql_char,10}}, {"STR3",{sql_varchar,10}}, {"STR4",{sql_varchar,10}}]}. describe_floating() -> {ok,[{"F",sql_double},{"R",sql_double},{"D",sql_double}]}. describe_dec_num() -> {ok,[{"MYDEC",{sql_decimal,9,3}},{"MYNUM",{sql_decimal,9,2}}]}. %------------------------------------------------------------------------- drop_proc() -> "drop procedure test_proc1;". stored_proc_integer_out() -> "create or replace PROCEDURE test_proc1(" ++ "int_a OUT NUMBER, " ++ "int_b OUT NUMBER) " ++ "is " ++ "begin " ++ " int_a := 123; " ++ " int_b := 456; " ++ "exception " ++ "WHEN NO_DATA_FOUND THEN " ++ " int_a := 0; " ++ " int_b := 0; " ++ "end;". param_query(Ref) -> odbc:param_query(Ref, "call test_proc1(?,?)", [{sql_integer, out, [0]}, {sql_integer, out, [0]}]). query_result() -> {executed, 2, [{123, 456}]}.