pg 0.18.1 → 0.18.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2a71f6279b6ff4b259ae30cb251f13841886614
4
- data.tar.gz: 5e371bd632ff3e95e1ba4f1de1439c3582e52909
3
+ metadata.gz: c8807e5610f416a9fe9a4bcc597986c25a5c35b9
4
+ data.tar.gz: a98032311306661db24f48a69d847a1896a277fb
5
5
  SHA512:
6
- metadata.gz: f46963607a119a3d9c247e4128ba99dfc6ee53994c138c69ee2582a8c0448553ec3cc9a2cfbd91a40f535e3c259ae1d1fbc84cea5fe263a402c07c16e0188dab
7
- data.tar.gz: aa4714f8a7126960060582fb96e1550a77909ff0751f0b73e848abc2d51c75578ff8483951d3a236d7f26474e70128c86f29106caddb458b8027cf9028d6e1e8
6
+ metadata.gz: 882d2bda71c4946f3a0b72ffb8a8e31528411019dd531d472537c310f2e79c36e4bccd17280d359cf31f00e07b613b818ffb3e1f1d3df3c4a0d599c05d0d400e
7
+ data.tar.gz: 76e9118ba0e1f7e0577c1f86d5bb0c0a509000df3b8bf0fd4b1e169e34050f3849267e41066c4cd3e2f1d4d221e4a089a5466bc131debfafb675ff22c87525e2
Binary file
data.tar.gz.sig CHANGED
Binary file
data/ChangeLog CHANGED
@@ -1,9 +1,176 @@
1
+ 2015-05-14 Michael Granger <ged@FaerieMUD.org>
2
+
3
+ * .rvmrc:
4
+ Bump default rvm Ruby to 2.2
5
+ [128b075d5800] [tip]
6
+
7
+ 2015-03-13 Lars Kanis <lars@greiz-reinsdorf.de>
8
+
9
+ * ext/pg_text_encoder.c, ext/util.c, ext/util.h:
10
+ Avoid possible symbol name clash when linking againt static libpq.
11
+
12
+ This should fix issue #209 .
13
+ [b859963462b2]
14
+
15
+ 2015-02-11 Lars Kanis <lars@greiz-reinsdorf.de>
16
+
17
+ * ext/pg.c, spec/pg/connection_spec.rb:
18
+ Merge from git branch.
19
+ [b60c89ee93c8]
20
+
21
+ * ext/pg.h, ext/pg_text_decoder.c:
22
+ Merge branch 'non-c99-compiler'
23
+ [b111c84b8445]
24
+
25
+ 2015-02-06 Lars Kanis <lars@greiz-reinsdorf.de>
26
+
27
+ * ext/extconf.rb, ext/pg.h, ext/pg_result.c, ext/pg_text_decoder.c,
28
+ ext/pg_type_map_by_mri_type.c:
29
+ Use fixed size arrays in case the compiler doesn't support C99
30
+ variable length arrays.
31
+
32
+ This is notably the MSVC compiler.
33
+
34
+ Note: The MSVC build environment is currently not tested on a
35
+ regular base, so is not fully supported.
36
+ [1269b8ad77b8]
37
+
38
+ 2015-02-11 Lars Kanis <lars@greiz-reinsdorf.de>
39
+
40
+ * ext/pg_connection.c:
41
+ Replace quote_ident implementation with that of
42
+ PG::TextEncoder::Identifier .
43
+
44
+ This allowes quoation of array of strings in addition to plain
45
+ strings and removes duplicated code.
46
+
47
+ It also removes the 63 byte limitation and therefore obsolets pull
48
+ request #21 https://bitbucket.org/ged/ruby-pg/pull-request/21
49
+ [714601d05fba]
50
+
51
+ * ext/pg.c, ext/pg.h, ext/pg_text_decoder.c, ext/pg_text_encoder.c,
52
+ spec/pg/connection_spec.rb, spec/pg/type_spec.rb:
53
+ Derive PG::TextDecoder::Identifier from PG::SimpleDecoder instead of
54
+ CompositeDecoder
55
+
56
+ .. and equally for Encoder.
57
+
58
+ Identifiers are strings, so there is no good reason to compose it
59
+ from other element types. This change allows a faster quoting
60
+ implementation.
61
+ [df67241d1a4f]
62
+
63
+ 2015-02-03 Michael Granger <ged@FaerieMUD.org>
64
+
65
+ * README.rdoc, ext/pg.c:
66
+ Update copyright notices
67
+ [447962e0dcba] [github/master]
68
+
69
+ * spec/pg/connection_spec.rb:
70
+ Whitespace fixes
71
+ [f4a85f78807d]
72
+
73
+ 2014-08-22 Chris Bandy <bandy.chris@gmail.com>
74
+
75
+ * lib/pg/connection.rb, spec/pg/connection_spec.rb:
76
+ Allow URI connection string
77
+
78
+ (Imported from https://github.com/ged/ruby-pg/pull/3)
79
+ [d4579ef9eae4]
80
+
81
+ 2015-01-27 Lars Kanis <lars@greiz-reinsdorf.de>
82
+
83
+ * lib/pg/text_decoder.rb, spec/pg/type_spec.rb:
84
+ Fix decoding of fractional timezones like "-00:25:21".
85
+ [766aa353b392]
86
+
87
+ 2015-01-27 Lars Kanis <kanis@comcard.de>
88
+
89
+ * History.rdoc, lib/pg/text_decoder.rb, spec/pg/type_spec.rb:
90
+ Fix decoding of fractional timezones like "04:30".
91
+
92
+ This fixes https://bitbucket.org/ged/ruby-pg/issue/203 .
93
+ [33225805259c]
94
+
95
+ 2015-01-16 Lars Kanis <kanis@comcard.de>
96
+
97
+ * History.rdoc, ext/extconf.rb, ext/pg_connection.c,
98
+ spec/pg/connection_spec.rb:
99
+ Revert "Add PG::Connection#hostaddr. This is new in PostgreSQL-9.4."
100
+
101
+ PQhostaddr was removed from final PostgreSQL-9.4.0.
102
+
103
+ This fixes issue #202 :https://bitbucket.org/ged/ruby-pg/issue/202
104
+
105
+ This reverts commit 03deab7aa63f9a00984014ce59617d552b4eac34.
106
+ [b51d736bca77]
107
+
108
+ * History.rdoc:
109
+ Add a missing enhancement for pg-0.18.0
110
+ [a7635c3425f3]
111
+
112
+ * .travis.yml:
113
+ Update ruby and postgresql versions for travic-ci
114
+ [b67b92f7db97]
115
+
116
+ 2015-01-06 Lars Kanis <kanis@comcard.de>
117
+
118
+ * Merge from git.
119
+ [625e9359ac47]
120
+
121
+ 2015-01-05 Lars Kanis <kanis@comcard.de>
122
+
123
+ * ext/pg_type_map_in_ruby.c:
124
+ Use a simpler fix for https://bitbucket.org/ged/ruby-
125
+ pg/commits/a38cf53a96f
126
+ [3d89d3aae4fd]
127
+
128
+ 2015-01-05 Michael Granger <ged@FaerieMUD.org>
129
+
130
+ * .hgtags:
131
+ Added tag v0.18.1 for changeset f97dd6cb4f34
132
+ [f8122014065a]
133
+
134
+ * .hgsigs:
135
+ Added signature for changeset ba5aff64b5cb
136
+ [f97dd6cb4f34] [v0.18.1]
137
+
138
+ * History.rdoc, lib/pg.rb:
139
+ Bump the patch version, update history
140
+ [ba5aff64b5cb]
141
+
142
+ * Rakefile:
143
+ Fix the minimum Ruby version (closes #199)
144
+ [69422cc8dc45]
145
+
146
+ 2015-01-03 Michael Granger <ged@FaerieMUD.org>
147
+
148
+ * .hgtags:
149
+ Added tag v0.18.0 for changeset cfb2bfc0f661
150
+ [8aff3973f2d2]
151
+
152
+ * .hgsigs:
153
+ Added signature for changeset c519766e3ec9
154
+ [cfb2bfc0f661] [v0.18.0]
155
+
156
+ * History.rdoc:
157
+ Update the History
158
+ [c519766e3ec9]
159
+
160
+ * Manifest.txt:
161
+ Keep the manifest sorted so it can be diffed.
162
+ [d7cdbfd1b516]
163
+
164
+ * Rakefile:
165
+ Add a Rake task for generating the gemspec
166
+ [ec6d6ce61a15]
167
+
1
168
  2014-12-26 Lars Kanis <lars@greiz-reinsdorf.de>
2
169
 
3
170
  * lib/pg/basic_type_mapping.rb:
4
171
  Add a warning about Type OIDs without decoder in
5
172
  PG::BasicTypeMapForResults.
6
- [592e29cdf2e9] [tip]
173
+ [592e29cdf2e9]
7
174
 
8
175
  2014-12-13 Lars Kanis <lars@greiz-reinsdorf.de>
9
176
 
@@ -285,7 +452,7 @@
285
452
 
286
453
  * ext/pg_text_encoder.c, spec/pg/type_spec.rb:
287
454
  Allow non Array values as input for TextEncoder::Array.
288
- [a4725dfca9e4] [github/master]
455
+ [a4725dfca9e4]
289
456
 
290
457
  * ext/pg_coder.c, spec/pg/type_spec.rb:
291
458
  Clarify handling of nil/NULL values by PG::Coders.
@@ -1,3 +1,18 @@
1
+ == v0.18.2 [2015-05-14] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Enhancements:
4
+
5
+ - Allow URI connection string (thanks to Chris Bandy)
6
+
7
+ Bugfixes:
8
+
9
+ - Speedups and fixes for PG::TextDecoder::Identifier and quoting behavior
10
+ - Revert addition of PG::Connection#hostaddr [#202].
11
+ - Fix decoding of fractional timezones and timestamps [#203]
12
+ - Fixes for non-C99 compilers
13
+ - Avoid possible symbol name clash when linking againt static libpq.
14
+
15
+
1
16
  == v0.18.1 [2015-01-05] Michael Granger <ged@FaerieMUD.org>
2
17
 
3
18
  Correct the minimum compatible Ruby version to 1.9.3. #199
@@ -19,6 +34,7 @@ Enhancements:
19
34
  - Add Enumerator variant to PG::Result#each and #each_row.
20
35
  - Add PG::Connection#conninfo and #hostaddr.
21
36
  - Add PG.init_openssl and PG.init_ssl methods.
37
+ - Add PG::Result.inspect
22
38
  - Force zero termination for all text strings that are given to libpq.
23
39
  It raises an ArgumentError if the string contains a null byte.
24
40
  - Update Windows cross build to PostgreSQL 9.3.
@@ -130,7 +130,7 @@ Lars Kanis <lars@greiz-reinsdorf.de>.
130
130
 
131
131
  == Copying
132
132
 
133
- Copyright (c) 1997-2013 by the authors.
133
+ Copyright (c) 1997-2015 by the authors.
134
134
 
135
135
  * Jeff Davis <ruby-pg@j-davis.com>
136
136
  * Guy Decoux (ts) <decoux@moulon.inra.fr>
@@ -73,7 +73,6 @@ have_func 'PQlibVersion'
73
73
  have_func 'PQping'
74
74
  have_func 'PQsetSingleRowMode'
75
75
  have_func 'PQconninfo'
76
- have_func 'PQhostaddr'
77
76
 
78
77
  have_func 'rb_encdb_alias'
79
78
  have_func 'rb_enc_alias'
@@ -95,6 +94,10 @@ $defs.push( "-DHAVE_ST_NOTIFY_EXTRA" ) if
95
94
  have_header 'unistd.h'
96
95
  have_header 'ruby/st.h' or have_header 'st.h' or abort "pg currently requires the ruby/st.h header"
97
96
 
97
+ checking_for "C99 variable length arrays" do
98
+ $defs.push( "-DHAVE_VARIABLE_LENGTH_ARRAYS" ) if try_compile('void test_vla(int l){ int vla[l]; }')
99
+ end
100
+
98
101
  create_header()
99
102
  create_makefile( "pg_ext" )
100
103
 
data/ext/pg.c CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * pg.c - Toplevel extension
3
- * $Id: pg.c,v a9724aef9116 2014/12/12 21:03:27 lars $
3
+ * $Id: pg.c,v b60c89ee93c8 2015/02/11 20:59:36 lars $
4
4
  *
5
5
  * Author/s:
6
6
  *
@@ -15,7 +15,7 @@
15
15
  * See Contributors.rdoc for the many additional fine people that have contributed
16
16
  * to this library over the years.
17
17
  *
18
- * Copyright (c) 1997-2012 by the authors.
18
+ * Copyright (c) 1997-2015 by the authors.
19
19
  *
20
20
  * You may redistribute this software under the same terms as Ruby itself; see
21
21
  * http://www.ruby-lang.org/en/LICENSE.txt or the LICENSE file in the source
@@ -252,7 +252,7 @@ pg_get_rb_encoding_as_pg_encoding( rb_encoding *enc )
252
252
  * char *current_out, *end_capa;
253
253
  * PG_RB_STR_NEW( string, current_out, end_capa );
254
254
  * while( data_is_going_to_be_processed ){
255
- * PG_RB_STR_ENSURE_CAPA( string, 2 current_out, end_capa );
255
+ * PG_RB_STR_ENSURE_CAPA( string, 2, current_out, end_capa );
256
256
  * *current_out++ = databyte1;
257
257
  * *current_out++ = databyte2;
258
258
  * }
data/ext/pg.h CHANGED
@@ -133,6 +133,15 @@
133
133
  typedef long suseconds_t;
134
134
  #endif
135
135
 
136
+ #if defined(HAVE_VARIABLE_LENGTH_ARRAYS)
137
+ #define PG_VARIABLE_LENGTH_ARRAY(type, name, len, maxlen) type name[(len)];
138
+ #else
139
+ #define PG_VARIABLE_LENGTH_ARRAY(type, name, len, maxlen) \
140
+ type name[(maxlen)] = {(len)>(maxlen) ? (rb_raise(rb_eArgError, "Number of " #name " (%d) exceeds allowed maximum of " #maxlen, (len) ), (type)1) : (type)0};
141
+
142
+ #define PG_MAX_COLUMNS 4000
143
+ #endif
144
+
136
145
  /* The data behind each PG::Connection object */
137
146
  typedef struct {
138
147
  PGconn *pgconn;
@@ -313,6 +322,7 @@ VALUE lookup_error_class _(( const char * ));
313
322
  VALUE pg_bin_dec_bytea _(( t_pg_coder*, char *, int, int, int, int ));
314
323
  VALUE pg_text_dec_string _(( t_pg_coder*, char *, int, int, int, int ));
315
324
  int pg_coder_enc_to_s _(( t_pg_coder*, VALUE, char *, VALUE *));
325
+ int pg_text_enc_identifier _(( t_pg_coder*, VALUE, char *, VALUE *));
316
326
  t_pg_coder_enc_func pg_coder_enc_func _(( t_pg_coder* ));
317
327
  t_pg_coder_dec_func pg_coder_dec_func _(( t_pg_coder*, int ));
318
328
  void pg_define_coder _(( const char *, void *, VALUE, VALUE ));
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * pg_connection.c - PG::Connection class extension
3
- * $Id: pg_connection.c,v a7befacdef4e 2014/12/12 20:57:14 lars $
3
+ * $Id: pg_connection.c,v 714601d05fba 2015/02/11 20:45:04 lars $
4
4
  *
5
5
  */
6
6
 
@@ -627,22 +627,6 @@ pgconn_host(VALUE self)
627
627
  return rb_tainted_str_new2(host);
628
628
  }
629
629
 
630
- #ifdef HAVE_PQHOSTADDR
631
- /*
632
- * call-seq:
633
- * conn.hostaddr()
634
- *
635
- * Returns the server numeric IP address of the connection.
636
- */
637
- static VALUE
638
- pgconn_hostaddr(VALUE self)
639
- {
640
- char *hostaddr = PQhostaddr(pg_get_pgconn(self));
641
- if (!hostaddr) return Qnil;
642
- return rb_tainted_str_new2(hostaddr);
643
- }
644
- #endif
645
-
646
630
  /*
647
631
  * call-seq:
648
632
  * conn.port()
@@ -3013,7 +2997,9 @@ pgconn_transaction(VALUE self)
3013
2997
  /*
3014
2998
  * call-seq:
3015
2999
  * PG::Connection.quote_ident( str ) -> String
3000
+ * PG::Connection.quote_ident( array ) -> String
3016
3001
  * conn.quote_ident( str ) -> String
3002
+ * conn.quote_ident( array ) -> String
3017
3003
  *
3018
3004
  * Returns a string that is safe for inclusion in a SQL query as an
3019
3005
  * identifier. Note: this is not a quote function for values, but for
@@ -3030,31 +3016,20 @@ pgconn_transaction(VALUE self)
3030
3016
  * Similarly, this function also protects against special characters,
3031
3017
  * and other things that might allow SQL injection if the identifier
3032
3018
  * comes from an untrusted source.
3019
+ *
3020
+ * If the parameter is an Array, then all it's values are separately quoted
3021
+ * and then joined by a "." character. This can be used for identifiers in
3022
+ * the form "schema"."table"."column" .
3023
+ *
3024
+ * This method is functional identical to the encoder PG::TextEncoder::Identifier .
3025
+ *
3033
3026
  */
3034
3027
  static VALUE
3035
3028
  pgconn_s_quote_ident(VALUE self, VALUE in_str)
3036
3029
  {
3037
3030
  VALUE ret;
3038
- char *str = StringValuePtr(in_str);
3039
- /* result size at most NAMEDATALEN*2 plus surrounding
3040
- * double-quotes. */
3041
- char buffer[NAMEDATALEN*2+2];
3042
- unsigned int i=0,j=0;
3043
- unsigned int str_len = RSTRING_LENINT(in_str);
3044
-
3045
- if(str_len >= NAMEDATALEN) {
3046
- rb_raise(rb_eArgError,
3047
- "Input string is longer than NAMEDATALEN-1 (%d)",
3048
- NAMEDATALEN-1);
3049
- }
3050
- buffer[j++] = '"';
3051
- for(i = 0; i < str_len && str[i]; i++) {
3052
- if(str[i] == '"')
3053
- buffer[j++] = '"';
3054
- buffer[j++] = str[i];
3055
- }
3056
- buffer[j++] = '"';
3057
- ret = rb_str_new(buffer,j);
3031
+ pg_text_enc_identifier(NULL, in_str, NULL, &ret);
3032
+
3058
3033
  OBJ_INFECT(ret, in_str);
3059
3034
  PG_ENCODING_SET_NOCHECK(ret, ENCODING_GET( rb_obj_class(self) == rb_cPGconn ? self : in_str ));
3060
3035
 
@@ -3835,9 +3810,6 @@ init_pg_connection()
3835
3810
  rb_define_method(rb_cPGconn, "user", pgconn_user, 0);
3836
3811
  rb_define_method(rb_cPGconn, "pass", pgconn_pass, 0);
3837
3812
  rb_define_method(rb_cPGconn, "host", pgconn_host, 0);
3838
- #ifdef HAVE_PQHOSTADDR
3839
- rb_define_method(rb_cPGconn, "hostaddr", pgconn_hostaddr, 0);
3840
- #endif
3841
3813
  rb_define_method(rb_cPGconn, "port", pgconn_port, 0);
3842
3814
  rb_define_method(rb_cPGconn, "tty", pgconn_tty, 0);
3843
3815
  #ifdef HAVE_PQCONNINFO
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * pg_result.c - PG::Result class extension
3
- * $Id: pg_result.c,v f23dd01bcb52 2014/11/17 10:47:53 kanis $
3
+ * $Id: pg_result.c,v 1269b8ad77b8 2015/02/06 16:38:23 lars $
4
4
  *
5
5
  */
6
6
 
@@ -863,7 +863,7 @@ pgresult_each_row(VALUE self)
863
863
  num_fields = PQnfields(this->pgresult);
864
864
 
865
865
  for ( row = 0; row < num_rows; row++ ) {
866
- VALUE row_values[num_fields];
866
+ PG_VARIABLE_LENGTH_ARRAY(VALUE, row_values, num_fields, PG_MAX_COLUMNS)
867
867
 
868
868
  /* populate the row */
869
869
  for ( field = 0; field < num_fields; field++ ) {
@@ -892,7 +892,7 @@ pgresult_values(VALUE self)
892
892
  VALUE results = rb_ary_new2( num_rows );
893
893
 
894
894
  for ( row = 0; row < num_rows; row++ ) {
895
- VALUE row_values[num_fields];
895
+ PG_VARIABLE_LENGTH_ARRAY(VALUE, row_values, num_fields, PG_MAX_COLUMNS)
896
896
 
897
897
  /* populate the row */
898
898
  for ( field = 0; field < num_fields; field++ ) {
@@ -1176,7 +1176,7 @@ pgresult_stream_each_row(VALUE self)
1176
1176
  }
1177
1177
 
1178
1178
  for ( row = 0; row < ntuples; row++ ) {
1179
- VALUE row_values[nfields];
1179
+ PG_VARIABLE_LENGTH_ARRAY(VALUE, row_values, nfields, PG_MAX_COLUMNS)
1180
1180
  int field;
1181
1181
 
1182
1182
  /* populate the row */
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * pg_text_decoder.c - PG::TextDecoder module
3
- * $Id: pg_text_decoder.c,v b7f9daeeba29 2014/11/21 19:53:47 lars $
3
+ * $Id: pg_text_decoder.c,v b111c84b8445 2015/02/11 20:54:03 lars $
4
4
  *
5
5
  */
6
6
 
@@ -293,7 +293,7 @@ pg_text_dec_array(t_pg_coder *conv, char *val, int len, int tuple, int field, in
293
293
  }
294
294
 
295
295
  /*
296
- * Document-class: PG::TextDecoder::Identifier < PG::CompositeDecoder
296
+ * Document-class: PG::TextDecoder::Identifier < PG::SimpleDecoder
297
297
  *
298
298
  * This is the decoder class for PostgreSQL identifiers.
299
299
  *
@@ -305,16 +305,13 @@ pg_text_dec_array(t_pg_coder *conv, char *val, int len, int tuple, int field, in
305
305
  static VALUE
306
306
  pg_text_dec_identifier(t_pg_coder *conv, char *val, int len, int tuple, int field, int enc_idx)
307
307
  {
308
- t_pg_composite_coder *this = (t_pg_composite_coder *)conv;
309
- t_pg_coder_dec_func dec_func = pg_coder_dec_func(this->elem, 0);
310
-
311
308
  /* Return value: array */
312
309
  VALUE array;
313
310
  VALUE elem;
314
311
  int word_index = 0;
315
312
  int index;
316
313
  /* Use a buffer of the same length, as that will be the worst case */
317
- char word[len + 1];
314
+ PG_VARIABLE_LENGTH_ARRAY(char, word, len + 1, NAMEDATALEN)
318
315
 
319
316
  /* The current character in the input string. */
320
317
  char c;
@@ -331,7 +328,7 @@ pg_text_dec_identifier(t_pg_coder *conv, char *val, int len, int tuple, int fiel
331
328
  if(c == '.' && openQuote < 2 ) {
332
329
  word[word_index] = 0;
333
330
 
334
- elem = dec_func(conv, word, word_index, tuple, field, enc_idx);
331
+ elem = pg_text_dec_string(conv, word, word_index, tuple, field, enc_idx);
335
332
  rb_ary_push(array, elem);
336
333
 
337
334
  openQuote = 0;
@@ -353,7 +350,7 @@ pg_text_dec_identifier(t_pg_coder *conv, char *val, int len, int tuple, int fiel
353
350
  }
354
351
 
355
352
  word[word_index] = 0;
356
- elem = dec_func(conv, word, word_index, tuple, field, enc_idx);
353
+ elem = pg_text_dec_string(conv, word, word_index, tuple, field, enc_idx);
357
354
  rb_ary_push(array, elem);
358
355
 
359
356
  return array;
@@ -412,11 +409,11 @@ init_pg_text_decoder()
412
409
  pg_define_coder( "String", pg_text_dec_string, rb_cPG_SimpleDecoder, rb_mPG_TextDecoder );
413
410
  /* dummy = rb_define_class_under( rb_mPG_TextDecoder, "Bytea", rb_cPG_SimpleDecoder ); */
414
411
  pg_define_coder( "Bytea", pg_text_dec_bytea, rb_cPG_SimpleDecoder, rb_mPG_TextDecoder );
412
+ /* dummy = rb_define_class_under( rb_mPG_TextDecoder, "Identifier", rb_cPG_SimpleDecoder ); */
413
+ pg_define_coder( "Identifier", pg_text_dec_identifier, rb_cPG_SimpleDecoder, rb_mPG_TextDecoder );
415
414
 
416
415
  /* dummy = rb_define_class_under( rb_mPG_TextDecoder, "Array", rb_cPG_CompositeDecoder ); */
417
416
  pg_define_coder( "Array", pg_text_dec_array, rb_cPG_CompositeDecoder, rb_mPG_TextDecoder );
418
- /* dummy = rb_define_class_under( rb_mPG_TextDecoder, "Identifier", rb_cPG_CompositeDecoder ); */
419
- pg_define_coder( "Identifier", pg_text_dec_identifier, rb_cPG_CompositeDecoder, rb_mPG_TextDecoder );
420
417
  /* dummy = rb_define_class_under( rb_mPG_TextDecoder, "FromBase64", rb_cPG_CompositeDecoder ); */
421
418
  pg_define_coder( "FromBase64", pg_text_dec_from_base64, rb_cPG_CompositeDecoder, rb_mPG_TextDecoder );
422
419
  }