postgres-pr 0.0.1 → 0.1.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.
@@ -48,35 +48,44 @@ class Connection
48
48
  }
49
49
  end
50
50
 
51
+ class Result
52
+ attr_accessor :rows, :fields
53
+ def initialize(rows=[], fields=[])
54
+ @rows, @fields = rows, fields
55
+ end
56
+ end
57
+
51
58
  def query(sql)
52
59
  @mutex.synchronize {
53
60
  @conn << Query.dump(sql)
54
61
 
55
- rows = []
62
+ result = Result.new
56
63
 
57
64
  loop do
58
65
  msg = Message.read(@conn)
59
66
  case msg
60
67
  when DataRow
61
- rows << msg.columns
68
+ result.rows << msg.columns
62
69
  when CommandComplete
63
70
  when ReadyForQuery
64
71
  break
65
72
  when RowDescription
66
- # TODO
73
+ result.fields = msg.fields
67
74
  when CopyInResponse
68
75
  when CopyOutResponse
69
76
  when EmptyQueryResponse
77
+ p "EMPTY!"
70
78
  when ErrorResponse
71
79
  p msg
72
80
  raise
73
81
  when NoticeResponse
82
+ p msg
74
83
  # TODO
75
84
  else
76
85
  raise
77
86
  end
78
87
  end
79
- rows
88
+ result
80
89
  }
81
90
  end
82
91
 
@@ -399,6 +399,7 @@ end
399
399
 
400
400
  class RowDescription < Message
401
401
  register_message_type ?T
402
+ fields :fields
402
403
 
403
404
  class FieldInfo < Struct.new(:name, :oid, :attr_nr, :type_oid, :typlen, :atttypmod, :formatcode); end
404
405
 
@@ -430,6 +431,7 @@ class RowDescription < Message
430
431
  f.typlen = buffer.read_int16_network
431
432
  f.atttypmod = buffer.read_int32_network
432
433
  f.formatcode = buffer.read_int16_network
434
+ f
433
435
  }
434
436
  end
435
437
  end
data/lib/postgres.rb ADDED
@@ -0,0 +1,53 @@
1
+ # This is a compatibility layer for using the pure Ruby postgres-pr instead of
2
+ # the C interface of postgres.
3
+
4
+ begin
5
+ require 'postgres.so'
6
+ rescue LoadError
7
+ require 'postgres-pr/connection'
8
+ class PGconn
9
+ class << self
10
+ alias connect new
11
+ end
12
+
13
+ def initialize(host, port, options, tty, database, user, auth)
14
+ uri =
15
+ if host[0] != ?/
16
+ "tcp://#{ host }:#{ port }"
17
+ else
18
+ "unix:#{ host }/.s.PGSQL.#{ port }"
19
+ end
20
+
21
+ @db = database
22
+ @conn = Connection.new(database, user, auth, uri)
23
+ end
24
+
25
+ attr_reader :db
26
+
27
+ def query(sql)
28
+ PGresult.new(@conn.query(sql))
29
+ end
30
+
31
+ alias exec query
32
+ end
33
+
34
+ class PGresult
35
+ def initialize(res)
36
+ @res = res
37
+ end
38
+
39
+ def fields
40
+ @res.fields.map {|f| f.name}
41
+ end
42
+
43
+ def result
44
+ @res.rows.map {|row| row.map {|c| c || ""} }
45
+ end
46
+
47
+ include Enumerable
48
+
49
+ def each(&block)
50
+ result.each(&block)
51
+ end
52
+ end
53
+ end
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.8.1
3
3
  specification_version: 1
4
4
  name: postgres-pr
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
6
+ version: 0.1.0
7
7
  date: 2004-11-18
8
8
  summary: A pure Ruby interface to the PostgreSQL database
9
9
  require_paths:
@@ -27,8 +27,9 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
27
27
  platform: ruby
28
28
  files:
29
29
  - lib/postgres-pr
30
- - lib/binary_writer.rb
31
30
  - lib/byteorder.rb
31
+ - lib/postgres.rb
32
+ - lib/binary_writer.rb
32
33
  - lib/binary_reader.rb
33
34
  - lib/buffer.rb
34
35
  - lib/postgres-pr/typeconv