sequel_pg 1.10.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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