Class: SQLite3::Database
- Inherits:
-
Object
- Object
- SQLite3::Database
- Defined in:
- lib/carray/io/sqlite3.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
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/carray/io/sqlite3.rb', line 131 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
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/carray/io/sqlite3.rb', line 179 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
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/carray/io/sqlite3.rb', line 147 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
166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/carray/io/sqlite3.rb', line 166 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 |