integrate K. Burge changes
This commit is contained in:
parent
b869f6b33b
commit
ef151477bf
9
bdb.h
9
bdb.h
|
@ -23,7 +23,7 @@
|
||||||
#define FNLEN 40
|
#define FNLEN 40
|
||||||
|
|
||||||
#define filename_copy(fp,fv) \
|
#define filename_copy(fp,fv) \
|
||||||
strncpy(fp,RSTRING(fv)->ptr,FNLEN);
|
strncpy(fp,RSTRING_PTR(fv),FNLEN);
|
||||||
|
|
||||||
#define filename_dup(fpd,fps) \
|
#define filename_dup(fpd,fps) \
|
||||||
strncpy(fpd,fps,FNLEN);
|
strncpy(fpd,fps,FNLEN);
|
||||||
|
@ -57,8 +57,11 @@ typedef struct s_txnh {
|
||||||
t_envh *env;
|
t_envh *env;
|
||||||
} t_txnh;
|
} t_txnh;
|
||||||
|
|
||||||
#define ci(b,m) \
|
#define cu(b,m) \
|
||||||
rb_define_const(b,#m,INT2FIX(m))
|
rb_define_const(b,#m,UINT2NUM(m))
|
||||||
|
|
||||||
|
#define ci(b,m) \
|
||||||
|
rb_define_const(b,#m,INT2NUM(m))
|
||||||
|
|
||||||
#define cs(b,m) \
|
#define cs(b,m) \
|
||||||
rb_define_const(b,#m,rb_str_new2(m))
|
rb_define_const(b,#m,rb_str_new2(m))
|
||||||
|
|
43
extconf.rb
43
extconf.rb
|
@ -18,6 +18,10 @@ Options:
|
||||||
calls. Note the impact on indicating the include, below.
|
calls. Note the impact on indicating the include, below.
|
||||||
If you have not used bdb2 before, you need not use this argument.
|
If you have not used bdb2 before, you need not use this argument.
|
||||||
|
|
||||||
|
--nsl add nsl rpc library to build (4.4 uses rpc for replication)
|
||||||
|
|
||||||
|
--usedb berkeley db root
|
||||||
|
|
||||||
-h,--help this
|
-h,--help this
|
||||||
|
|
||||||
--dbh {dir for db.h}
|
--dbh {dir for db.h}
|
||||||
|
@ -30,7 +34,9 @@ end
|
||||||
|
|
||||||
opts = GetoptLong.new(
|
opts = GetoptLong.new(
|
||||||
[ "--va", GetoptLong::NO_ARGUMENT],
|
[ "--va", GetoptLong::NO_ARGUMENT],
|
||||||
|
[ "--nsl", GetoptLong::NO_ARGUMENT],
|
||||||
[ "-h","--help",GetoptLong::NO_ARGUMENT],
|
[ "-h","--help",GetoptLong::NO_ARGUMENT],
|
||||||
|
[ "--usedb", GetoptLong::REQUIRED_ARGUMENT],
|
||||||
[ "--dbh", GetoptLong::REQUIRED_ARGUMENT]
|
[ "--dbh", GetoptLong::REQUIRED_ARGUMENT]
|
||||||
)
|
)
|
||||||
opts.each do |opt,arg|
|
opts.each do |opt,arg|
|
||||||
|
@ -42,6 +48,10 @@ opts.each do |opt,arg|
|
||||||
exit
|
exit
|
||||||
when '--dbh'
|
when '--dbh'
|
||||||
$dbh_location=arg
|
$dbh_location=arg
|
||||||
|
when '--nsl'
|
||||||
|
$libs << " -lnsl"
|
||||||
|
when '--usedb'
|
||||||
|
$usedb=arg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -75,12 +85,14 @@ when /solaris2/
|
||||||
$libs << " -lnsl"
|
$libs << " -lnsl"
|
||||||
end
|
end
|
||||||
|
|
||||||
versions=%w(db-4.5 db-4.4 db-4.3 db-4.2)
|
versions=%w(db-4.6 db-4.5 db-4.4 db-4.3 db-4.2)
|
||||||
locations=%w(/usr/local/lib /opt/local/lib /usr/local/BerkeleyDB.4.3/lib /usr/local/BerkeleyDB.4.2/lib /opt/csw/bdb44/lib)
|
locations=%w(/usr/local/lib /opt/local/lib /usr/lib)
|
||||||
until versions.empty?
|
until versions.empty?
|
||||||
(lib_ok=find_library(this_version=versions.shift,'db_create',*locations)) && break
|
(lib_ok=find_library(this_version=versions.shift,'db_create',*locations)) && break
|
||||||
end
|
end
|
||||||
|
|
||||||
|
$stderr.puts(this_version)
|
||||||
|
|
||||||
$maj,$min=0,0
|
$maj,$min=0,0
|
||||||
if try_link0(<<SRC)
|
if try_link0(<<SRC)
|
||||||
#include <db.h>
|
#include <db.h>
|
||||||
|
@ -129,6 +141,7 @@ h_test_locations=%w(
|
||||||
/usr/local
|
/usr/local
|
||||||
/opt/csw/bdb44/include
|
/opt/csw/bdb44/include
|
||||||
)
|
)
|
||||||
|
h_test_locations.unshift($usedb) if $usedb
|
||||||
h_test_locations.unshift($dbh_location) if $dbh_location
|
h_test_locations.unshift($dbh_location) if $dbh_location
|
||||||
message("Header test locations are #{h_test_locations.inspect}\n")
|
message("Header test locations are #{h_test_locations.inspect}\n")
|
||||||
found=false
|
found=false
|
||||||
|
@ -157,7 +170,7 @@ end
|
||||||
# the above result, but it is another check.
|
# the above result, but it is another check.
|
||||||
# Find db.h, not sure this will work everywhere, gcc is ok
|
# Find db.h, not sure this will work everywhere, gcc is ok
|
||||||
src=create_tmpsrc("#include <db.h>")
|
src=create_tmpsrc("#include <db.h>")
|
||||||
cmd=cpp_command("-M")
|
cmd=cpp_command(RUBY_PLATFORM =~ /mswin/ ? nil : "-M")
|
||||||
r=`#{cmd}`
|
r=`#{cmd}`
|
||||||
header_loc=r.split.collect {|k| k if k =~ %r{^/.*db.h} }.compact[0]
|
header_loc=r.split.collect {|k| k if k =~ %r{^/.*db.h} }.compact[0]
|
||||||
message("header is #{header_loc}\n")
|
message("header is #{header_loc}\n")
|
||||||
|
@ -170,14 +183,24 @@ File.open(File.join($db_inc,"db.h")) {|fd|
|
||||||
File.open("bdb_aux._c","w") {|hd|
|
File.open("bdb_aux._c","w") {|hd|
|
||||||
hd.puts("/* This file automatically generated by extconf.rb */\n")
|
hd.puts("/* This file automatically generated by extconf.rb */\n")
|
||||||
fd.each_line {|l|
|
fd.each_line {|l|
|
||||||
if l =~ %r{^#define\s+(DBC?_\w*)\s+(\"?)} and macro_defined?($1,inc)
|
if l =~ %r{^#define\s+(DBC?_\w*)\s+([^\/]*)\s*(.*?)(\/\*.*)?$}
|
||||||
if $2 == '\"'
|
name = $1
|
||||||
hd.print(%Q{ cs(mBdb,%s);\n}%[$1])
|
value = $2
|
||||||
else
|
if macro_defined?(name,inc)
|
||||||
hd.print(%Q{ ci(mBdb,%s);\n}%[$1])
|
case value
|
||||||
|
when /^"/
|
||||||
|
hd.print(%Q{ cs(mBdb,%s);\n}%[name])
|
||||||
|
when /^\(?(0x|\d)/
|
||||||
|
hd.print(%Q{ cu(mBdb,%s);\n}%[name])
|
||||||
|
when /^\(?-/
|
||||||
|
hd.print(%Q{ ci(mBdb,%s);\n}%[name])
|
||||||
|
else
|
||||||
|
$stderr.puts "don't know how to handle #{name} #{value}, guessing UINT"
|
||||||
|
hd.print(%Q{ cu(mBdb,%s);\n}%[name])
|
||||||
|
end
|
||||||
|
message(".")
|
||||||
|
n+=1
|
||||||
end
|
end
|
||||||
message(".")
|
|
||||||
n+=1
|
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
75
test.rb
75
test.rb
|
@ -67,6 +67,7 @@ $stderr.puts("All OK!")
|
||||||
File.delete('db1.db') if File.exist?('db1.db')
|
File.delete('db1.db') if File.exist?('db1.db')
|
||||||
File.delete('db2.db') if File.exist?('db2.db')
|
File.delete('db2.db') if File.exist?('db2.db')
|
||||||
|
|
||||||
|
if File.exist?('skus')
|
||||||
db=Bdb::Db.new
|
db=Bdb::Db.new
|
||||||
db.open(nil,"db1.db",nil,Bdb::Db::HASH,Bdb::DB_CREATE,0)
|
db.open(nil,"db1.db",nil,Bdb::Db::HASH,Bdb::DB_CREATE,0)
|
||||||
|
|
||||||
|
@ -79,34 +80,37 @@ db.associate(nil,db2,0,
|
||||||
key.split('-')[0]
|
key.split('-')[0]
|
||||||
})
|
})
|
||||||
|
|
||||||
def write_data(db)
|
c=0
|
||||||
c=0
|
File.open("skus") {|fd|
|
||||||
IO.popen("gzip -dc skus.gz") {|fd|
|
tlen=fd.stat.size
|
||||||
tlen=fd.stat.size
|
pf=tlen/10
|
||||||
pf=tlen/10
|
pl=0
|
||||||
pl=0
|
fd.each do |line|
|
||||||
fd.each do |line|
|
c+=1
|
||||||
c+=1
|
if c%1000==0
|
||||||
if c%1000==0
|
$stderr.print('.')
|
||||||
$stderr.print('.')
|
cp=fd.pos
|
||||||
|
if ( cp/pf > pl )
|
||||||
|
pl=cp/pf
|
||||||
|
$stderr.print(" #{pl*10}% ")
|
||||||
end
|
end
|
||||||
line.chomp!
|
|
||||||
n=line*50 # multiply the amount of data written
|
|
||||||
isbn,item=line.split('|')[0..1]
|
|
||||||
sku="%s-%03d"%[isbn,item]
|
|
||||||
db.put(nil,sku,line,0)
|
|
||||||
end
|
end
|
||||||
} if File.exist?("skus.gz")
|
line.chomp!
|
||||||
$stderr.print("\ntotal count: #{c}\n")
|
n=line*50
|
||||||
end
|
isbn,item=line.split('|')[0..1]
|
||||||
|
sku="%s-%03d"%[isbn,item]
|
||||||
write_data(db)
|
db.put(sku,line,0)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
$stderr.print("\ntotal count: #{c}\n")
|
||||||
|
|
||||||
db2.close(0)
|
db2.close(0)
|
||||||
db.close(0)
|
db.close(0)
|
||||||
|
end
|
||||||
|
|
||||||
$stderr.puts("test environment")
|
$stderr.puts("test environment")
|
||||||
|
|
||||||
|
if File.exist?('skus')
|
||||||
env=Bdb::Env.new(0)
|
env=Bdb::Env.new(0)
|
||||||
env.cachesize=25*1024*1024;
|
env.cachesize=25*1024*1024;
|
||||||
env.open(".",Bdb::DB_INIT_CDB|Bdb::DB_INIT_MPOOL|Bdb::DB_CREATE,0)
|
env.open(".",Bdb::DB_INIT_CDB|Bdb::DB_INIT_MPOOL|Bdb::DB_CREATE,0)
|
||||||
|
@ -122,9 +126,36 @@ db.associate(nil,db2,0,
|
||||||
proc {|sdb,key,data|
|
proc {|sdb,key,data|
|
||||||
key.split('-')[0]
|
key.split('-')[0]
|
||||||
})
|
})
|
||||||
|
c=0
|
||||||
write_data(db)
|
File.open("skus") {|fd|
|
||||||
|
tlen=fd.stat.size
|
||||||
|
pf=tlen/10
|
||||||
|
pl=0
|
||||||
|
fd.each do |line|
|
||||||
|
c+=1
|
||||||
|
if c%1000==0
|
||||||
|
$stderr.print('.')
|
||||||
|
cp=fd.pos
|
||||||
|
if ( cp/pf > pl )
|
||||||
|
pl=cp/pf
|
||||||
|
$stderr.print(" #{pl*10}% ")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
line.chomp!
|
||||||
|
n=line*50
|
||||||
|
isbn,item=line.split('|')[0..1]
|
||||||
|
sku="%s-%03d"%[isbn,item]
|
||||||
|
db.put(sku,line,0)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
$stderr.print("\ntotal count: #{c}\n")
|
||||||
|
|
||||||
db2.close(0)
|
db2.close(0)
|
||||||
db.close(0)
|
db.close(0)
|
||||||
env.close
|
env.close
|
||||||
|
end
|
||||||
|
|
||||||
|
exit
|
||||||
|
|
||||||
|
$stderr.puts(Rusage.get.inspect)
|
||||||
|
$stderr.puts(`ps -up #{$$}`)
|
||||||
|
|
Loading…
Reference in a new issue