Simplify flags creation and usage

This commit is contained in:
Ary Borenszweig 2016-03-17 10:58:47 -03:00
parent db48a03797
commit eb8e4a6962
3 changed files with 22 additions and 14 deletions

View File

@ -40,8 +40,7 @@ describe Database do
db.execute "create table person (name string, age integer)" db.execute "create table person (name string, age integer)"
db.execute "insert into person values (\"foo\", 10)" db.execute "insert into person values (\"foo\", 10)"
in_memory_db = Database.new("file:memdb1?mode=memory&cache=shared", in_memory_db = Database.new("file:memdb1?mode=memory&cache=shared",
SQLite3::Flag::URI | SQLite3::Flag::CREATE | SQLite3::Flag::READWRITE | SQLite3.flags(URI, CREATE, READWRITE, FULLMUTEX))
SQLite3::Flag::FULLMUTEX)
source_rows = db.execute "select * from person" source_rows = db.execute "select * from person"
db.dump(in_memory_db) db.dump(in_memory_db)

View File

@ -14,7 +14,7 @@
class SQLite3::Database class SQLite3::Database
# Creates a new Database object that opens the given file. # Creates a new Database object that opens the given file.
def initialize(filename) def initialize(filename)
code = LibSQLite3.open_v2(filename, out @db, (SQLite3::Flag::READWRITE | SQLite3::Flag::CREATE), nil) code = LibSQLite3.open_v2(filename, out @db, SQLite3.flags(READWRITE, CREATE), nil)
if code != 0 if code != 0
raise Exception.new(@db) raise Exception.new(@db)
end end
@ -43,18 +43,19 @@ class SQLite3::Database
# Dump the database to another SQLite3 instance. This can be used for backing up a SQLite3::Database # Dump the database to another SQLite3 instance. This can be used for backing up a SQLite3::Database
# to disk or the opposite # to disk or the opposite
#
# Example: # Example:
# ``` #
# source_database = SQLite3::Database.new("mydatabase.db") # ```
# in_memory_db = SQLite3::Database.new( # source_database = SQLite3::Database.new("mydatabase.db")
# "file:memdb1?mode=memory&cache=shared", # in_memory_db = SQLite3::Database.new(
# LibSQLite3::Flag::URI | LibSQLite3::Flag::CREATE | LibSQLite3::Flag::READWRITE | # "file:memdb1?mode=memory&cache=shared",
# LibSQLite3::Flag::FULLMUTEX) # SQLite3.flags(URI, CREATE, READWRITE, FULLMUTEX))
# source_database.dump(in_memory_db) # source_database.dump(in_memory_db)
# source_database.close() # source_database.close
# in_memory_db.exectute { |row| # in_memory_db.exectute do |row|
# ... # # ...
# } # end
# ``` # ```
def dump(to : SQLite3::Database) def dump(to : SQLite3::Database)
backup_item = LibSQLite3.backup_init(to.@db, "main", @db, "main") backup_item = LibSQLite3.backup_init(to.@db, "main", @db, "main")

View File

@ -1,3 +1,4 @@
@[Flags]
enum SQLite3::Flag enum SQLite3::Flag
READONLY = 0x00000001 # Ok for sqlite3_open_v2() READONLY = 0x00000001 # Ok for sqlite3_open_v2()
READWRITE = 0x00000002 # Ok for sqlite3_open_v2() READWRITE = 0x00000002 # Ok for sqlite3_open_v2()
@ -20,3 +21,10 @@ enum SQLite3::Flag
PRIVATECACHE = 0x00040000 # Ok for sqlite3_open_v2() PRIVATECACHE = 0x00040000 # Ok for sqlite3_open_v2()
WAL = 0x00080000 # VFS only WAL = 0x00080000 # VFS only
end end
module SQLite3
# Same as doing SQLite3::Flag.flag(*values)
macro flags(*values)
::SQLite3::Flag.flags({{*values}})
end
end