Class: SQLite3::Database
- Inherits:
-
Object
- Object
- SQLite3::Database
- Defined in:
- lib/carray-io-sqlite3/core.rb
Instance Method Summary collapse
- #create_table(table, data, names = nil) ⇒ Object
-
#import_table(dbfile, src_table, dst_table = nil) ⇒ Object
insert.
- #insert(table, data) ⇒ Object
- #schema(table = nil) ⇒ Object
Instance Method Details
#create_table(table, data, names = nil) ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/carray-io-sqlite3/core.rb', line 141 def create_table (table, data, names = nil) ncols = data.rank == 1 ? 1 : data.dim1 if names varlist = names.map{|s| s.to_s } elsif data.respond_to?(:names) varlist = data.names else varlist = [] ncols.times do |i| varlist << "col#{i}" end end execute %{create table #{table} (#{varlist.join(",")})} insert(table, data) end |
#import_table(dbfile, src_table, dst_table = nil) ⇒ Object
insert
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/carray-io-sqlite3/core.rb', line 189 def import_table (dbfile, src_table, dst_table = nil) dst_table ||= src_table db = "db#{Thread.current.object_id}" execute %{ attach database "#{dbfile}" as #{db}; } sql = get_first_value %{ select sql from #{db}.sqlite_master where type = 'table' and name = "#{src_table}" } sql.sub!(/create\s+table\s(.+?)\s/i, "create table if not exists #{dst_table}") execute sql execute %{ insert into #{dst_table} select * from #{db}.#{src_table}; } indeces = execute %{ select sql from #{db}.sqlite_master where type = 'index' and tbl_name = "#{src_table}" } indeces.each do |row| sql = row[0] unless sql break end sql.sub!(/create\s+index/i, "create index if not exists") sql.sub!(/on\s+#{src_table}\(/i, "on #{dst_table}(") execute sql end execute %{ detach database #{db}; } end |
#insert(table, data) ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/carray-io-sqlite3/core.rb', line 157 def insert (table, data) table_info = execute %{ pragma table_info(#{table}) } if table_info.empty? raise "#{table} is empty table" end qstns = (["?"]*table_info.size).join(",") self.transaction { stmt = prepare %{ insert or replace into #{table} values (#{qstns}) } data.to_a.each do |row| stmt.execute *row end stmt.close } end |
#schema(table = nil) ⇒ Object
176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/carray-io-sqlite3/core.rb', line 176 def schema (table = nil) if table return get_first_value %{ select sql from sqlite_master where type in ('table', 'view', 'index') and name = "#{table}" } else return execute(%{ select sql from sqlite_master where type in ('table', 'view', 'index') }).map{|v| v[0]} end end |