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 "insert into person values (\"foo\", 10)"
in_memory_db = Database.new("file:memdb1?mode=memory&cache=shared",
SQLite3::Flag::URI | SQLite3::Flag::CREATE | SQLite3::Flag::READWRITE |
SQLite3::Flag::FULLMUTEX)
SQLite3.flags(URI, CREATE, READWRITE, FULLMUTEX))
source_rows = db.execute "select * from person"
db.dump(in_memory_db)

View File

@ -14,7 +14,7 @@
class SQLite3::Database
# Creates a new Database object that opens the given file.
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
raise Exception.new(@db)
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
# to disk or the opposite
#
# Example:
# ```
# source_database = SQLite3::Database.new("mydatabase.db")
# in_memory_db = SQLite3::Database.new(
# "file:memdb1?mode=memory&cache=shared",
# LibSQLite3::Flag::URI | LibSQLite3::Flag::CREATE | LibSQLite3::Flag::READWRITE |
# LibSQLite3::Flag::FULLMUTEX)
# source_database.dump(in_memory_db)
# source_database.close()
# in_memory_db.exectute { |row|
# ...
# }
#
# ```
# source_database = SQLite3::Database.new("mydatabase.db")
# in_memory_db = SQLite3::Database.new(
# "file:memdb1?mode=memory&cache=shared",
# SQLite3.flags(URI, CREATE, READWRITE, FULLMUTEX))
# source_database.dump(in_memory_db)
# source_database.close
# in_memory_db.exectute do |row|
# # ...
# end
# ```
def dump(to : SQLite3::Database)
backup_item = LibSQLite3.backup_init(to.@db, "main", @db, "main")

View File

@ -1,3 +1,4 @@
@[Flags]
enum SQLite3::Flag
READONLY = 0x00000001 # 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()
WAL = 0x00080000 # VFS only
end
module SQLite3
# Same as doing SQLite3::Flag.flag(*values)
macro flags(*values)
::SQLite3::Flag.flags({{*values}})
end
end