[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

[ANN] amalgalite 0.2.1 Released

Jeremy Hinegardner

7/6/2008 6:27:00 AM

A quick bugfix release for amalgalite. If you had a bug running amalgalite
with an error similar to:

amalgalite-0.2.0/ext/amalgalite3.so: undefined symbol: pthread_mutexattr_init

That is now fixed. This has to do with wheter or not your ruby installation was
configured with --enable-pthread.

* http://www.copiousfreetime.org/articles/2008/07/05/amalgalite-pthread-...

{{ Release notes for Version 0.2.1 }}

* Bugfixes
* make sure that the pthread support in sqlite3 matches that of ruby
* fix schema reloading in the example scripts
--
========================================================================
Jeremy Hinegardner jeremy@hinegardner.org


3 Answers

unbewusst.sein

7/6/2008 8:37:00 PM

0

Jeremy Hinegardner <jeremy@hinegardner.org> wrote:

> {{ Release notes for Version 0.2.1 }}

now, i'm running this version.
because i want to switch from ruby-sqlite3 to amalgalite, i've tried
translating a ruby-sqlite3 script to amalgalite.

on the ruby-sqlite3 side i'm using PRAGMA :

#! /usr/bin/env ruby

require 'rubygems'
require 'sqlite3'

file='places.sqlite'
#file=Dir.glob("#{ENV['HOME']}/Library/Application
Support/Firefox/Profiles/*.default/places.sqlite").last
db = SQLite3::Database.new( "#{file}" )

tables=[]
db.execute( "SELECT name FROM sqlite_master WHERE type='table' ORDER BY
name;" ) do |row|
tables<<row[0]
end

tables.each do |table|
puts table+":"
index_list=[]
db.execute( "PRAGMA index_list( #{table} );" ) do |row|
index_list<<row[1]
end
index_list.each do |index_name|
puts " #{index_name}:"
columns=nil
db.execute2( "PRAGMA index_info( #{index_name} );" ) do |row|
if !columns
columns=row.join(' ')
puts " "+columns
else
puts " "+row.join(' ')
end
end
end
puts
end


and get :

moz_anno_attributes:
sqlite_autoindex_moz_anno_attributes_1:
seqno cid name
0 1 name

moz_annos:
moz_annos_placeattributeindex:
seqno cid name
0 1 place_id
1 2 anno_attribute_id
....

on the amalgalite side, i've tried :
#! /usr/bin/env ruby

require 'rubygems'
require 'amalgalite'

class String
def underline
return self+"\n+"+("-"*(self.length-2))+"+"
end
end

db = Amalgalite::Database.new( "places.sqlite" )
index_info=%w[ sql ]
max_width=index_info.collect { |c| c.length }.sort.last
pragma_info=%w[ seqno cid name ]
pragma_max_width=pragma_info.collect { |c| c.length }.sort.last

db.schema.tables.keys.sort.each do |table_name|
puts "Table: #{table_name}".underline
indexes=db.schema.tables[table_name].indexes
indexes.each do |index|
puts " Index : #{index.name}"
index_info.each do |ci|
puts " |#{ci.rjust( max_width, "." )} : #{index.send( ci )}"
end
db.pragma("index_info( #{index.name} )") do |index_field|
pragma_info.each do |ci|
puts " |#{ci.rjust( pragma_max_width, "." )} :
#{index_field.send( ci )}"
end
end
puts
end
end

db.close


where i get :
Table: moz_anno_attributes
+------------------------+
Index : sqlite_autoindex_moz_anno_attributes_1
|sql :

Table: moz_annos
+--------------+
Index : moz_annos_placeattributeindex
|sql : CREATE UNIQUE INDEX moz_annos_placeattributeindex ON
moz_annos (place_id, anno_attribute_id)

....

then it seems that db.pragma("index_info( #{index.name} )") returns an
empty array, although the source code gives:
# File lib/amalgalite/database.rb, line 440
440: def pragma( cmd )
441: execute("PRAGMA #{cmd}")
442: end

showing db.execute2( "PRAGMA index_info( #{index_name} );" ) and
#pragma( cmd ) are equivalent (apart from columns names).

where am i wrong here ?

--
Une Bévue

Jeremy Hinegardner

7/7/2008 12:31:00 AM

0

Replace this section with

> db.pragma("index_info( #{index.name} )") do |index_field|
> pragma_info.each do |ci|
> puts " |#{ci.rjust( pragma_max_width, "." )} : #{index_field.send( ci )}"
> end
> end

db.pragma("index_info( #{index.name} )").each do |index_field|
pragma_info.each do |ci|
puts " |#{ci.rjust( pragma_max_width, "." )} : #{index_field[ ci ]}"
end
end

> then it seems that db.pragma("index_info( #{index.name} )") returns an
> empty array, although the source code gives:
> # File lib/amalgalite/database.rb, line 440
> 440: def pragma( cmd )
> 441: execute("PRAGMA #{cmd}")
> 442: end

Database#pragma does not accept a block. that is what is going on. #execute
dos and there's a difference there. The block attached to your #pragma call is
not getting executed.

For now I've added a todo to fix this for the next release and also to have the
Amalgalite::Index class do the index_info() call itself and make the seqno, ci
and name available via some API.

enjoy,

-jeremy

--
========================================================================
Jeremy Hinegardner jeremy@hinegardner.org


unbewusst.sein

7/7/2008 9:22:00 AM

0

Jeremy Hinegardner <jeremy@hinegardner.org> wrote:

>
> Database#pragma does not accept a block. that is what is going on.
> #execute dos and there's a difference there. The block attached to your
> #pragma call is not getting executed.

I should have catched that point, because there is no yield, in the
source...

> For now I've added a todo to fix this for the next release and also to
> have the Amalgalite::Index class do the index_info() call itself and make
> the seqno, ci and name available via some API.

Fine ! thanks a lot !

--
Une Bévue