swift-db-postgres 0.2.7 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.3.0 (2013-02-19)
2
+
3
+ * supports encoding option while connecting.
4
+
1
5
  == 0.2.7 (2012-11-22)
2
6
 
3
7
  * rb_gc_register_address() the bind values.
data/README.md CHANGED
@@ -47,6 +47,26 @@ MRI adapter for PostgreSQL
47
47
  #insert_id
48
48
  ```
49
49
 
50
+ ## Connection options
51
+
52
+ ```
53
+ ╭────────────────────╥────────────┬─────────────╮
54
+ │ Name ║ Default │ Optional │
55
+ ╞════════════════════╬════════════╪═════════════╡
56
+ │ db ║ - │ No │
57
+ │ host ║ 127.0.0.1 │ Yes │
58
+ │ port ║ 5432 │ Yes │
59
+ │ user ║ Etc.login │ Yes │
60
+ │ password ║ nil │ Yes │
61
+ │ encoding ║ utf8 │ Yes │
62
+ │ ssl[:sslmode] ║ allow │ Yes │
63
+ │ ssl[:sslcert] ║ nil │ Yes │
64
+ │ ssl[:sslkey] ║ nil │ Yes │
65
+ │ ssl[:sslrootcert] ║ nil │ Yes │
66
+ │ ssl[:sslcrl] ║ nil │ Yes │
67
+ └────────────────────╨────────────┴─────────────┘
68
+ ```
69
+
50
70
  ## Bind parameters and hstore operators
51
71
 
52
72
  Swift::DB::Postgres uses '?' as a bind parameter and replaces them with the '$' equivalents. This causes issues when
@@ -68,7 +88,7 @@ end
68
88
  ```ruby
69
89
  require 'swift/db/postgres'
70
90
 
71
- db = Swift::DB::Postgres.new(db: 'swift_test')
91
+ db = Swift::DB::Postgres.new(db: 'swift_test', encoding: 'utf8')
72
92
 
73
93
  db.execute('drop table if exists users')
74
94
  db.execute('create table users (id serial, name text, age integer, created_at timestamp)')
@@ -62,7 +62,7 @@ void append_ssl_option(char *buffer, int size, VALUE ssl, char *key, char *fallb
62
62
 
63
63
  VALUE db_postgres_adapter_initialize(VALUE self, VALUE options) {
64
64
  char *connection_info;
65
- VALUE db, user, pass, host, port, ssl;
65
+ VALUE db, user, pass, host, port, ssl, enc;
66
66
  Adapter *a = db_postgres_adapter_handle(self);
67
67
 
68
68
  if (TYPE(options) != T_HASH)
@@ -74,6 +74,7 @@ VALUE db_postgres_adapter_initialize(VALUE self, VALUE options) {
74
74
  host = rb_hash_aref(options, ID2SYM(rb_intern("host")));
75
75
  port = rb_hash_aref(options, ID2SYM(rb_intern("port")));
76
76
  ssl = rb_hash_aref(options, ID2SYM(rb_intern("ssl")));
77
+ enc = rb_hash_aref(options, ID2SYM(rb_intern("encoding")));
77
78
 
78
79
  if (NIL_P(db))
79
80
  rb_raise(eSwiftConnectionError, "Invalid db name");
@@ -83,6 +84,8 @@ VALUE db_postgres_adapter_initialize(VALUE self, VALUE options) {
83
84
  port = rb_str_new2("5432");
84
85
  if (NIL_P(user))
85
86
  user = sUser;
87
+ if (NIL_P(enc))
88
+ enc = rb_str_new2("utf8");
86
89
 
87
90
  if (!NIL_P(ssl) && TYPE(ssl) != T_HASH)
88
91
  rb_raise(eSwiftArgumentError, "ssl options needs to be a hash");
@@ -108,7 +111,8 @@ VALUE db_postgres_adapter_initialize(VALUE self, VALUE options) {
108
111
  rb_raise(eSwiftConnectionError, PQerrorMessage(a->connection));
109
112
 
110
113
  PQsetNoticeProcessor(a->connection, (PQnoticeProcessor)db_postgres_adapter_notice, (void*)self);
111
- PQsetClientEncoding(a->connection, "utf8");
114
+ if (PQsetClientEncoding(a->connection, CSTRING(enc)) != 0)
115
+ rb_raise(eSwiftConnectionError, PQerrorMessage(a->connection));
112
116
  return self;
113
117
  }
114
118
 
@@ -5,6 +5,14 @@ describe 'postgres adapter' do
5
5
  assert db
6
6
  end
7
7
 
8
+ it 'it should allow custom encoding' do
9
+ assert Swift::DB::Postgres.new(db: 'swift_test', encoding: 'utf8')
10
+ end
11
+
12
+ it 'should raise connection error on not so awesome encoding' do
13
+ assert_raises(Swift::ConnectionError) {Swift::DB::Postgres.new(db: 'swift_test', encoding: 'not_awesome')}
14
+ end
15
+
8
16
  it 'should execute sql' do
9
17
  assert db.execute("select * from pg_tables")
10
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swift-db-postgres
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-22 00:00:00.000000000 Z
12
+ date: 2013-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake