summary refs log tree commit diff homepage
path: root/sqlite.cr
diff options
context:
space:
mode:
Diffstat (limited to 'sqlite.cr')
-rw-r--r--sqlite.cr29
1 files changed, 18 insertions, 11 deletions
diff --git a/sqlite.cr b/sqlite.cr
index 7df496b..4cca647 100644
--- a/sqlite.cr
+++ b/sqlite.cr
@@ -50,18 +50,18 @@ class Database
   class Statement
     def initialize(db, query)
       bytes = query.to_slice
-      Database.check SQLite.prepare db.ref, bytes, bytes.size,
+      Database.check SQLite.prepare db, bytes, bytes.size,
                                     out @ref, out @tail
     end
 
-    def ref
-      @ref
-    end
-
     def step : LibC::Int
       SQLite.step @ref
     end
 
+    def row
+      Row.new @ref
+    end
+
     def finalize
       Database.check SQLite.finalize @ref
     end
@@ -102,20 +102,19 @@ class Database
         self.exec SCHEMA do end
         self.exec "PRAGMA user_version = #{MIGRATIONS.size}" do end
       end
+    rescue ex
+      self.finalize
+      raise ex
     end
   end
 
-  def ref
-    @ref
-  end
-
   def exec(query : String)
-    stmt = Statement.new self, query
+    stmt = Statement.new @ref, query
     loop do
       rc = stmt.step
       case rc
       when SQLite::ROW
-        yield Row.new stmt.ref
+        yield stmt.row
       when SQLite::DONE
         break
       else
@@ -124,6 +123,14 @@ class Database
     end
   end
 
+  def members
+    result = [] of Tuple(String, String, String)
+    self.exec "SELECT nick, opennic, icann FROM member" do |row|
+      result << {row[0].text, row[1].text, row[2].text}
+    end
+    result
+  end
+
   def finalize
     Database.check SQLite.close @ref
   end