sequel_pg 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +6 -0
  3. data/ext/sequel_pg/sequel_pg.c +57 -40
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5e59a1152aaf6b21d44b1d57ce4653b6248a61db684a443bcdbbb86fb7c7ff8
4
- data.tar.gz: 5f3392deba2a7286b6fa24a8c3b93ea8ee362f027c6df75a55574910b62a4c7c
3
+ metadata.gz: c587158ff9ea71f6a0ce019384c317b03b8c1a9c6027f363502e98f148b4a958
4
+ data.tar.gz: ad74cf362d21fe64409be4b29536709c5d6d6dbabe3a248a3cad5da5f282124f
5
5
  SHA512:
6
- metadata.gz: 04d3ac1ba009d05ba2dd46d32865926a79a3cae63ef3f29a9d26d5874409fedfc54e6855a0a9ea9e7dd4dd9ef5e8603bda134368e040d9e3858f00b063ca8363
7
- data.tar.gz: 0d147bca275b89d70255430fdadf4c7afc0a83a5f48414a656c1b583297ac05dea61b0d03d43a78b6bcff31f27adc8d62462e98de4228348171131f4e71144be
6
+ metadata.gz: 39fb59374fe67630cea51820851b380f9537ef6769599ee43581855eb99e70c5251d03c70134a0512ad6ce36bc127704dcf152a2113de1461deb2839e19830c5
7
+ data.tar.gz: 470e31d71b43e3cad932cad0838805047d8d69013795a28d29b0099460a7a285ae5caae6a3e3950d61b80e30d2668cbf398fdc0dce1e16a1f970226e48c69cdb
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ === 1.11.0 (2018-07-09)
2
+
3
+ * Set encoding correctly for hash symbol keys (jeremyevans)
4
+
5
+ * Slight performance improvement to float parsing (jeremyevans)
6
+
1
7
  === 1.10.0 (2018-06-25)
2
8
 
3
9
  * Add native inet/cidr parsers (jeremyevans)
@@ -1,4 +1,4 @@
1
- #define SEQUEL_PG_VERSION_INTEGER 11000
1
+ #define SEQUEL_PG_VERSION_INTEGER 11100
2
2
 
3
3
  #include <string.h>
4
4
  #include <stdio.h>
@@ -79,7 +79,6 @@ static VALUE spg_Sequel;
79
79
  static VALUE spg_PGArray;
80
80
  static VALUE spg_Blob;
81
81
  static VALUE spg_Blob_instance;
82
- static VALUE spg_Kernel;
83
82
  static VALUE spg_Date;
84
83
  static VALUE spg_DateTime;
85
84
  static VALUE spg_SQLTime;
@@ -881,18 +880,27 @@ static VALUE spg__array_col_value(char *v, size_t length, VALUE converter, int e
881
880
  break;
882
881
  case 700: /* float */
883
882
  case 701:
884
- if (strcmp("NaN", v) == 0) {
885
- rv = spg_nan;
886
- } else if (strcmp("Infinity", v) == 0) {
887
- rv = spg_pos_inf;
888
- } else if (strcmp("-Infinity", v) == 0) {
889
- rv = spg_neg_inf;
890
- } else {
891
- rv = rb_float_new(rb_cstr_to_dbl(v, Qfalse));
883
+ switch(*v) {
884
+ case 'N':
885
+ rv = spg_nan;
886
+ break;
887
+ case 'I':
888
+ rv = spg_pos_inf;
889
+ break;
890
+ case '-':
891
+ if (v[1] == 'I') {
892
+ rv = spg_neg_inf;
893
+ } else {
894
+ rv = rb_float_new(rb_cstr_to_dbl(v, Qfalse));
895
+ }
896
+ break;
897
+ default:
898
+ rv = rb_float_new(rb_cstr_to_dbl(v, Qfalse));
899
+ break;
892
900
  }
893
901
  break;
894
902
  case 1700: /* numeric */
895
- rv = rb_funcall(spg_Kernel, spg_id_BigDecimal, 1, rb_str_new(v, length));
903
+ rv = rb_funcall(rb_mKernel, spg_id_BigDecimal, 1, rb_str_new(v, length));
896
904
  break;
897
905
  case 1082: /* date */
898
906
  rv = spg_date(v, db, length);
@@ -1018,18 +1026,27 @@ static VALUE spg__col_value(VALUE self, PGresult *res, long i, long j, VALUE* co
1018
1026
  break;
1019
1027
  case 700: /* float */
1020
1028
  case 701:
1021
- if (strcmp("NaN", v) == 0) {
1022
- rv = spg_nan;
1023
- } else if (strcmp("Infinity", v) == 0) {
1024
- rv = spg_pos_inf;
1025
- } else if (strcmp("-Infinity", v) == 0) {
1026
- rv = spg_neg_inf;
1027
- } else {
1028
- rv = rb_float_new(rb_cstr_to_dbl(v, Qfalse));
1029
+ switch(*v) {
1030
+ case 'N':
1031
+ rv = spg_nan;
1032
+ break;
1033
+ case 'I':
1034
+ rv = spg_pos_inf;
1035
+ break;
1036
+ case '-':
1037
+ if (v[1] == 'I') {
1038
+ rv = spg_neg_inf;
1039
+ } else {
1040
+ rv = rb_float_new(rb_cstr_to_dbl(v, Qfalse));
1041
+ }
1042
+ break;
1043
+ default:
1044
+ rv = rb_float_new(rb_cstr_to_dbl(v, Qfalse));
1045
+ break;
1029
1046
  }
1030
1047
  break;
1031
1048
  case 1700: /* numeric */
1032
- rv = rb_funcall(spg_Kernel, spg_id_BigDecimal, 1, rb_str_new(v, PQgetlength(res, i, j)));
1049
+ rv = rb_funcall(rb_mKernel, spg_id_BigDecimal, 1, rb_str_new(v, PQgetlength(res, i, j)));
1033
1050
  break;
1034
1051
  case 1082: /* date */
1035
1052
  rv = spg_date(v, self, PQgetlength(res, i, j));
@@ -1246,18 +1263,21 @@ static VALUE spg__field_ids(VALUE v, VALUE *colsyms, long nfields) {
1246
1263
  return pg_columns;
1247
1264
  }
1248
1265
 
1249
- static void spg_set_column_info(VALUE self, PGresult *res, VALUE *colsyms, VALUE *colconvert) {
1266
+ static void spg_set_column_info(VALUE self, PGresult *res, VALUE *colsyms, VALUE *colconvert, int enc_index) {
1250
1267
  long i;
1251
1268
  long j;
1252
1269
  long nfields;
1253
1270
  int timestamp_info = 0;
1254
1271
  int time_info = 0;
1255
1272
  VALUE conv_procs = 0;
1273
+ VALUE tmp;
1256
1274
 
1257
1275
  nfields = PQnfields(res);
1258
1276
 
1259
1277
  for(j=0; j<nfields; j++) {
1260
- colsyms[j] = rb_funcall(self, spg_id_output_identifier, 1, rb_str_new2(PQfname(res, j)));
1278
+ tmp = rb_str_new2(PQfname(res, j));
1279
+ PG_ENCODING_SET_NOCHECK(tmp, enc_index);
1280
+ colsyms[j] = rb_funcall(self, spg_id_output_identifier, 1, tmp);
1261
1281
  i = PQftype(res, j);
1262
1282
  switch (i) {
1263
1283
  /* scalar types */
@@ -1363,7 +1383,7 @@ static VALUE spg_yield_hash_rows(VALUE self, VALUE rres, VALUE ignore) {
1363
1383
  rb_raise(rb_eRangeError, "more than %d columns in query (%ld columns detected)", SPG_MAX_FIELDS, nfields);
1364
1384
  }
1365
1385
 
1366
- spg_set_column_info(self, res, colsyms, colconvert);
1386
+ spg_set_column_info(self, res, colsyms, colconvert, enc_index);
1367
1387
 
1368
1388
  opts = rb_funcall(self, spg_id_opts, 0);
1369
1389
  if (rb_type(opts) == T_HASH) {
@@ -1643,7 +1663,7 @@ static VALUE spg__yield_each_row(VALUE self) {
1643
1663
  rb_raise(rb_eRangeError, "more than %d columns in query", SPG_MAX_FIELDS);
1644
1664
  }
1645
1665
 
1646
- spg_set_column_info(self, res, colsyms, colconvert);
1666
+ spg_set_column_info(self, res, colsyms, colconvert, enc_index);
1647
1667
 
1648
1668
  while (PQntuples(res) != 0) {
1649
1669
  h = rb_hash_new();
@@ -1715,12 +1735,10 @@ static VALUE spg_yield_each_row(VALUE self, VALUE rconn) {
1715
1735
 
1716
1736
  void Init_sequel_pg(void) {
1717
1737
  VALUE c, spg_Postgres;
1718
- ID cg;
1719
- cg = rb_intern("const_get");
1720
1738
 
1721
- spg_Sequel = rb_funcall(rb_cObject, cg, 1, rb_str_new2("Sequel"));
1722
- spg_Postgres = rb_funcall(spg_Sequel, cg, 1, rb_str_new2("Postgres"));
1739
+ spg_Sequel = rb_const_get(rb_cObject, rb_intern("Sequel"));
1723
1740
  rb_global_variable(&spg_Sequel);
1741
+ spg_Postgres = rb_const_get(spg_Sequel, rb_intern("Postgres"));
1724
1742
 
1725
1743
  if(rb_obj_respond_to(spg_Postgres, rb_intern("sequel_pg_version_supported?"), 0)) {
1726
1744
  if(!RTEST(rb_funcall(spg_Postgres, rb_intern("sequel_pg_version_supported?"), 1, INT2FIX(SEQUEL_PG_VERSION_INTEGER)))) {
@@ -1728,7 +1746,8 @@ void Init_sequel_pg(void) {
1728
1746
  return;
1729
1747
  }
1730
1748
  }
1731
- rb_funcall(spg_Postgres, rb_intern("const_set"), 2, ID2SYM(rb_intern("SEQUEL_PG_VERSION_INTEGER")), INT2FIX(SEQUEL_PG_VERSION_INTEGER));
1749
+
1750
+ rb_const_set(spg_Postgres, rb_intern("SEQUEL_PG_VERSION_INTEGER"), INT2FIX(SEQUEL_PG_VERSION_INTEGER));
1732
1751
 
1733
1752
  spg_id_BigDecimal = rb_intern("BigDecimal");
1734
1753
  spg_id_new = rb_intern("new");
@@ -1809,19 +1828,17 @@ void Init_sequel_pg(void) {
1809
1828
  spg_sym_inet = ID2SYM(rb_intern("inet"));
1810
1829
  spg_sym_cidr = ID2SYM(rb_intern("cidr"));
1811
1830
 
1812
- spg_Blob = rb_funcall(rb_funcall(spg_Sequel, cg, 1, rb_str_new2("SQL")), cg, 1, rb_str_new2("Blob"));
1831
+ spg_Blob = rb_const_get(rb_const_get(spg_Sequel, rb_intern("SQL")), rb_intern("Blob"));
1813
1832
  rb_global_variable(&spg_Blob);
1814
1833
  spg_Blob_instance = rb_obj_freeze(rb_funcall(spg_Blob, spg_id_new, 0));
1815
1834
  rb_global_variable(&spg_Blob_instance);
1816
- spg_SQLTime= rb_funcall(spg_Sequel, cg, 1, rb_str_new2("SQLTime"));
1835
+ spg_SQLTime = rb_const_get(spg_Sequel, rb_intern("SQLTime"));
1817
1836
  rb_global_variable(&spg_SQLTime);
1818
- spg_Kernel = rb_funcall(rb_cObject, cg, 1, rb_str_new2("Kernel"));
1819
- rb_global_variable(&spg_Kernel);
1820
- spg_Date = rb_funcall(rb_cObject, cg, 1, rb_str_new2("Date"));
1837
+ spg_Date = rb_const_get(rb_cObject, rb_intern("Date"));
1821
1838
  rb_global_variable(&spg_Date);
1822
- spg_DateTime = rb_funcall(rb_cObject, cg, 1, rb_str_new2("DateTime"));
1839
+ spg_DateTime = rb_const_get(rb_cObject, rb_intern("DateTime"));
1823
1840
  rb_global_variable(&spg_DateTime);
1824
- spg_PGError = rb_funcall(rb_funcall(rb_cObject, cg, 1, rb_str_new2("PG")), cg, 1, rb_str_new2("Error"));
1841
+ spg_PGError = rb_const_get(rb_const_get(rb_cObject, rb_intern("PG")), rb_intern("Error"));
1825
1842
  rb_global_variable(&spg_PGError);
1826
1843
 
1827
1844
  spg_nan = rb_eval_string("0.0/0.0");
@@ -1834,7 +1851,7 @@ void Init_sequel_pg(void) {
1834
1851
  rb_global_variable(&spg_usec_per_day);
1835
1852
 
1836
1853
  rb_require("ipaddr");
1837
- spg_IPAddr = rb_funcall(rb_cObject, rb_intern("const_get"), 1, rb_str_new2("IPAddr"));
1854
+ spg_IPAddr = rb_const_get(rb_cObject, rb_intern("IPAddr"));
1838
1855
  rb_global_variable(&spg_IPAddr);
1839
1856
  spg_use_ipaddr_alloc = RTEST(rb_eval_string("IPAddr.new.instance_variables.sort == [:@addr, :@family, :@mask_addr]"));
1840
1857
  spg_vmasks4 = rb_eval_string("a = [0]*33; a[0] = 0; a[32] = 0xffffffff; 31.downto(1){|i| a[i] = a[i+1] - (1 << (31 - i))}; a.freeze");
@@ -1842,7 +1859,7 @@ void Init_sequel_pg(void) {
1842
1859
  spg_vmasks6 = rb_eval_string("a = [0]*129; a[0] = 0; a[128] = 0xffffffffffffffffffffffffffffffff; 127.downto(1){|i| a[i] = a[i+1] - (1 << (127 - i))}; a.freeze");
1843
1860
  rb_global_variable(&spg_vmasks6);
1844
1861
 
1845
- c = rb_funcall(spg_Postgres, cg, 1, rb_str_new2("Dataset"));
1862
+ c = rb_const_get(spg_Postgres, rb_intern("Dataset"));
1846
1863
  rb_undef_method(c, "yield_hash_rows");
1847
1864
  rb_define_private_method(c, "yield_hash_rows", spg_yield_hash_rows, 2);
1848
1865
  rb_undef_method(c, "fetch_rows_set_cols");
@@ -1856,7 +1873,7 @@ void Init_sequel_pg(void) {
1856
1873
  spg_id_check = rb_intern("check");
1857
1874
 
1858
1875
  rb_define_private_method(c, "yield_each_row", spg_yield_each_row, 1);
1859
- c = rb_funcall(spg_Postgres, cg, 1, rb_str_new2("Adapter"));
1876
+ c = rb_const_get(spg_Postgres, rb_intern("Adapter"));
1860
1877
  rb_define_private_method(c, "set_single_row_mode", spg_set_single_row_mode, 0);
1861
1878
  #endif
1862
1879
 
@@ -1865,6 +1882,6 @@ void Init_sequel_pg(void) {
1865
1882
  rb_require("sequel_pg/sequel_pg");
1866
1883
 
1867
1884
  rb_require("sequel/extensions/pg_array");
1868
- spg_PGArray = rb_funcall(spg_Postgres, cg, 1, rb_str_new2("PGArray"));
1885
+ spg_PGArray = rb_const_get(spg_Postgres, rb_intern("PGArray"));
1869
1886
  rb_global_variable(&spg_PGArray);
1870
1887
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel_pg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-25 00:00:00.000000000 Z
11
+ date: 2018-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg