Просмотр исходного кода

Merge remote-tracking branch 'github.benbro/master' into async-integration

Anton Lebedevich 12 лет назад
Родитель
Сommit
f9e3e52fa8
3 измененных файлов с 37 добавлено и 1 удалено
  1. 18 0
      src/pgsql_binary.erl
  2. 12 0
      src/pgsql_types.erl
  3. 7 1
      test_src/pgsql_tests.erl

+ 18 - 0
src/pgsql_binary.erl

@@ -35,6 +35,12 @@ encode(float4array, L) when is_list(L)      -> encode_array(float4, L);
 encode(float8array, L) when is_list(L)      -> encode_array(float8, L);
 encode(chararray, L) when is_list(L)        -> encode_array(bpchar, L);
 encode(textarray, L) when is_list(L)        -> encode_array(text, L);
+encode(datearray, L) when is_list(L)        -> encode_array(date, L);
+encode(timearray, L) when is_list(L)        -> encode_array(time, L);
+encode(timetzarray, L) when is_list(L)      -> encode_array(timetz, L);
+encode(timestamparray, L) when is_list(L)   -> encode_array(timestamp, L);
+encode(timestamptzarray, L) when is_list(L) -> encode_array(timestamptz, L);
+encode(intervalarray, L) when is_list(L)    -> encode_array(interval, L);
 encode(Type, L) when is_list(L)             -> encode(Type, list_to_binary(L));
 encode(_Type, _Value)                       -> {error, unsupported}.
 
@@ -61,6 +67,12 @@ decode(float4array, B)                      -> decode_array(B);
 decode(float8array, B)                      -> decode_array(B);
 decode(chararray, B)                        -> decode_array(B);
 decode(textarray, B)                        -> decode_array(B);
+decode(datearray, B)                        -> decode_array(B);
+decode(timearray, B)                        -> decode_array(B);
+decode(timetzarray, B)                      -> decode_array(B);
+decode(timestamparray, B)                   -> decode_array(B);
+decode(timestamptzarray, B)                 -> decode_array(B);
+decode(intervalarray, B)                    -> decode_array(B);
 decode(_Other, Bin)                         -> Bin.
 
 encode_array(Type, A) ->
@@ -139,4 +151,10 @@ supports(float4array) -> true;
 supports(float8array) -> true;
 supports(chararray)   -> true;
 supports(textarray)   -> true;
+supports(datearray)   -> true;
+supports(timearray)   -> true;
+supports(timetzarray) -> true;
+supports(timestamparray)     -> true;
+supports(timestamptzarray)   -> true;
+supports(intervalarray)      -> true;
 supports(_Type)       -> false.

+ 12 - 0
src/pgsql_types.erl

@@ -54,9 +54,15 @@ oid2type(1043) -> varchar;
 oid2type(1082) -> date;
 oid2type(1083) -> time;
 oid2type(1114) -> timestamp;
+oid2type(1115) -> timestamparray;
+oid2type(1182) -> datearray;
+oid2type(1183) -> timearray;
 oid2type(1184) -> timestamptz;
+oid2type(1185) -> timestamptzarray;
 oid2type(1186) -> interval;
+oid2type(1187) -> intervalarray;
 oid2type(1266) -> timetz;
+oid2type(1270) -> timetzarray;
 oid2type(1560) -> bit;
 oid2type(1562) -> varbit;
 oid2type(1700) -> numeric;
@@ -138,9 +144,15 @@ type2oid(varchar)               -> 1043;
 type2oid(date)                  -> 1082;
 type2oid(time)                  -> 1083;
 type2oid(timestamp)             -> 1114;
+type2oid(timestamparray)        -> 1115;
+type2oid(datearray)             -> 1182;
+type2oid(timearray)             -> 1183;
 type2oid(timestamptz)           -> 1184;
+type2oid(timestamptzarray)      -> 1185;
 type2oid(interval)              -> 1186;
+type2oid(intervalarray)         -> 1187;
 type2oid(timetz)                -> 1266;
+type2oid(timetzarray)           -> 1270;
 type2oid(bit)                   -> 1560;
 type2oid(varbit)                -> 1562;
 type2oid(numeric)               -> 1700;

+ 7 - 1
test_src/pgsql_tests.erl

@@ -499,7 +499,13 @@ array_type_test(Module) ->
           Select(int8,   [[[[1, 2]], [[3, 4]]]]),
           Select(text,   [<<"one">>, <<"two>">>]),
           Select(float4, [0.0, 1.0, 0.123]),
-          Select(float8, [0.0, 1.0, 0.123])
+          Select(float8, [0.0, 1.0, 0.123]),
+          Select(date, [{2008,1,2}, {2008,1,3}]),
+          Select(time, [{0,1,2.0}, {0,1,3.0}]),
+          Select(timetz, [{{0,1,2.0},1*60*60}, {{0,1,3.0},1*60*60}]),
+          Select(timestamp, [{{2008,1,2},{3,4,5.0}}, {{2008,1,2},{3,4,6.0}}]),
+          Select(timestamptz, [{{2008,1,2},{3,4,5.0}}, {{2008,1,2},{3,4,6.0}}]),
+          Select(interval, [{{1,2,3.1},0,0}, {{1,2,3.2},0,0}])
       end).
 
 text_format_test(Module) ->