diff --git a/ext/pg_text_decoder.c b/ext/pg_text_decoder.c index cc2d42d64..65c5c19f0 100644 --- a/ext/pg_text_decoder.c +++ b/ext/pg_text_decoder.c @@ -823,7 +823,7 @@ pg_text_dec_inet(t_pg_coder *conv, const char *val, int len, int tuple, int fiel VALUE vmasks; char dst[16]; char buf[64]; - int af = strchr(val, '.') ? AF_INET : AF_INET6; + int af = strchr(val, ':') ? AF_INET6 : AF_INET; int mask = -1; if (len >= 64) { diff --git a/spec/pg/basic_type_map_for_results_spec.rb b/spec/pg/basic_type_map_for_results_spec.rb index 99d19c48c..2b7bed82a 100644 --- a/spec/pg/basic_type_map_for_results_spec.rb +++ b/spec/pg/basic_type_map_for_results_spec.rb @@ -351,6 +351,9 @@ '1234:3456:5678:789a:9abc:bced:edf0:f012/32', '1234:3456:5678:789a:9abc:bced:edf0:f012/64', '1234:3456:5678:789a:9abc:bced:edf0:f012/96', + '::ffff:1.2.3.4', + '::ffff:1.2.3.4/120', + '::1.2.3.4', ] sql_vals = vals.map{|v| "CAST('#{v}' AS inet)"} res = @conn.exec_params(("SELECT " + sql_vals.join(', ')), [], format ) @@ -374,6 +377,7 @@ '1234:3456:5678:789a::/64', '1234:3456:5678:789a:9abc:bced::/96', '1234:3456:5678:789a:9abc:bced:edf0:f012/128', + '::ffff:1.2.3.0/120', ] sql_vals = vals.map { |v| "CAST('#{v}' AS cidr)" } res = @conn.exec_params(("SELECT " + sql_vals.join(', ')), [], format )