From eb8e4a6962bbf9480fe9963c4764d6b18ae7540d Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Thu, 17 Mar 2016 10:58:47 -0300 Subject: [PATCH] Simplify flags creation and usage --- spec/database_spec.cr | 3 +-- src/sqlite3/database.cr | 25 +++++++++++++------------ src/sqlite3/flags.cr | 8 ++++++++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/spec/database_spec.cr b/spec/database_spec.cr index e777e0a..612d599 100644 --- a/spec/database_spec.cr +++ b/spec/database_spec.cr @@ -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) diff --git a/src/sqlite3/database.cr b/src/sqlite3/database.cr index 8f4efdc..a83581e 100644 --- a/src/sqlite3/database.cr +++ b/src/sqlite3/database.cr @@ -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") diff --git a/src/sqlite3/flags.cr b/src/sqlite3/flags.cr index 9bf9cc8..ccb8456 100644 --- a/src/sqlite3/flags.cr +++ b/src/sqlite3/flags.cr @@ -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