Class: Titanium::SQLiteAdapter

Inherits:
Base
  • Object
show all
Defined in:
lib/sqlite_adapter.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSQLiteAdapter

Returns a new instance of SQLiteAdapter.



33
34
35
36
# File 'lib/sqlite_adapter.rb', line 33

def initialize
  @data_dir = File.expand_path("~/.titanium/data")
  @db_file = File.expand_path(File.join(@data_dir, "#{environment}.db"))
end

Instance Attribute Details

#db_fileObject (readonly)

Returns the value of attribute db_file.



31
32
33
# File 'lib/sqlite_adapter.rb', line 31

def db_file
  @db_file
end

Instance Method Details

#connectObject



42
43
44
45
46
# File 'lib/sqlite_adapter.rb', line 42

def connect
  File.makedirs(@data_dir)
  @db = Database.new(@db_file)
  @db.results_as_hash = true
end

#count_by_name(name) ⇒ Object



104
105
106
# File 'lib/sqlite_adapter.rb', line 104

def count_by_name(name)
  return @db.get_first_value(sql_count_of_resources_by_type_name, :name => name).to_i
end

#delete(resource_key) ⇒ Object



94
95
96
97
98
99
100
101
102
# File 'lib/sqlite_adapter.rb', line 94

def delete(resource_key)
  @db.transaction do
    resources_remaining = @db.get_first_value(sql_count_of_resources_by_resource_key, :resource_key => resource_key)
    @db.execute(sql_delete_attributes_by_resource_key, :resource_key => resource_key)
    @db.execute(sql_delete_type_by_resource_key, :resource_key => resource_key) if resources_remaining.to_i == 1
    @db.execute(sql_delete_resource_by_resource_key, :resource_key => resource_key)
  end
  return true
end

#delete_all_by_name(name) ⇒ Object



108
109
110
111
112
113
# File 'lib/sqlite_adapter.rb', line 108

def delete_all_by_name(name)
  @db.transaction do
    @db.execute_batch(sql_delete_resources_by_type_name, :name => name)
  end
  return true
end

#disconnectObject



48
49
50
51
52
# File 'lib/sqlite_adapter.rb', line 48

def disconnect
  if @db
    @db.close unless @db.closed?
  end
end

#erase_dbObject



38
39
40
# File 'lib/sqlite_adapter.rb', line 38

def erase_db
  File.delete(@db_file)
end

#find_by_name_and_conditions(name, key = nil, conditions = nil, sort_field = nil, sort_order = nil, limit = nil, offset = nil) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/sqlite_adapter.rb', line 115

def find_by_name_and_conditions(name, key=nil, conditions=nil, sort_field=nil, sort_order=nil, limit=nil, offset=nil)
  results = {}
  query_id = generate_query_id

  @db.transaction do 
    index = 0
    @db.execute(sql_drop_sorter_table(query_id))
    @db.execute(sql_create_sorter_table(query_id, name, key, conditions, sort_field, sort_order, limit, offset))
    @db.execute(sql_query_sorter_table(query_id)) do |row|
      build_results_hash(results, index, row)
      index = index + 1
    end
    @db.execute(sql_drop_sorter_table(query_id))
  end
  
  return build_results_array(results)
end

#insert(name, metadata) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/sqlite_adapter.rb', line 62

def insert(name, )
  resource_key = nil
  @db.transaction do
    type_id = @db.get_first_value(sql_find_type_id_from_type_name, :name => name)
    if type_id.nil?
      @db.execute(sql_insert_type, :name => name)
      type_id = @db.last_insert_row_id
    end
    @db.execute(sql_insert_resource, :type_id => type_id)
    resource_key = @db.last_insert_row_id
    now = Time.now.iso8601
    ['created_at'] = now
    ['updated_at'] = now
    .each do |key,value|
      @db.execute(sql_insert_attribute, :resource_key => resource_key, :key => key, :value => value)
    end
  end
  return resource_key.to_s
end

#startupObject



54
55
56
57
58
59
60
# File 'lib/sqlite_adapter.rb', line 54

def startup
  @db.transaction do
    @db.execute(sql_create_types_table)
    @db.execute(sql_create_resources_table)
    @db.execute(sql_create_attributes_table)
  end
end

#update(resource_key, metadata) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/sqlite_adapter.rb', line 82

def update(resource_key, )
  @db.transaction do
    @db.execute(sql_delete_attributes_by_resource_key, :resource_key => resource_key)
    ['created_at'] ||= Time.now.iso8601
    ['updated_at'] = Time.now.iso8601
    .each do |key,value|
      @db.execute(sql_insert_attribute, :resource_key => resource_key, :key => key, :value => value)
    end
  end
  return resource_key
end