ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/DB.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC/DB.pm (file contents):
Revision 1.38 by root, Fri Jul 18 22:40:51 2008 UTC vs.
Revision 1.41 by root, Wed Dec 24 04:09:27 2008 UTC

26use DC; 26use DC;
27 27
28our $ODBDIR = "cfplus-" . BDB::VERSION_MAJOR . "." . BDB::VERSION_MINOR . "-$Config{archname}"; 28our $ODBDIR = "cfplus-" . BDB::VERSION_MAJOR . "." . BDB::VERSION_MINOR . "-$Config{archname}";
29our $DBDIR = "client-" . BDB::VERSION_MAJOR . "." . BDB::VERSION_MINOR . "-$Config{archname}"; 29our $DBDIR = "client-" . BDB::VERSION_MAJOR . "." . BDB::VERSION_MINOR . "-$Config{archname}";
30our $DB_HOME = "$Deliantra::VARDIR/$DBDIR"; 30our $DB_HOME = "$Deliantra::VARDIR/$DBDIR";
31
32sub FIRST_TILE_ID () { 64 }
31 33
32unless (-d $DB_HOME) { 34unless (-d $DB_HOME) {
33 if (-d "$Deliantra::VARDIR/$ODBDIR") { 35 if (-d "$Deliantra::VARDIR/$ODBDIR") {
34 rename "$Deliantra::VARDIR/$ODBDIR", $DB_HOME; 36 rename "$Deliantra::VARDIR/$ODBDIR", $DB_HOME;
35 print STDERR "INFO: moved old database from $Deliantra::VARDIR/$ODBDIR to $DB_HOME\n"; 37 print STDERR "INFO: moved old database from $Deliantra::VARDIR/$ODBDIR to $DB_HOME\n";
57 59
58 $env->set_errfile (\*STDERR); 60 $env->set_errfile (\*STDERR);
59 $env->set_msgfile (\*STDERR); 61 $env->set_msgfile (\*STDERR);
60 $env->set_verbose (-1, 1); 62 $env->set_verbose (-1, 1);
61 63
62 $env->set_flags (BDB::AUTO_COMMIT | BDB::LOG_AUTOREMOVE | BDB::TXN_WRITE_NOSYNC); 64 $env->set_flags (BDB::AUTO_COMMIT | BDB::REGION_INIT);
65 $env->set_flags (&BDB::LOG_AUTOREMOVE ) if BDB::VERSION v0, v4.7;
66 $env->log_set_config (&BDB::LOG_AUTO_REMOVE) if BDB::VERSION v4.7;
67
68 $env->set_timeout (3, BDB::SET_TXN_TIMEOUT);
69 $env->set_timeout (3, BDB::SET_LOCK_TIMEOUT);
70
63 $env->set_cachesize (0, 2048 * 1024, 0); 71 $env->set_cachesize (0, 2048 * 1024, 0);
64 72
65 db_env_open $env, $DB_HOME, 73 db_env_open $env, $DB_HOME,
66 BDB::CREATE | BDB::REGISTER | BDB::RECOVER | BDB::INIT_MPOOL | BDB::INIT_LOCK | BDB::INIT_TXN, 74 BDB::CREATE | BDB::REGISTER | BDB::RECOVER | BDB::INIT_MPOOL | BDB::INIT_LOCK | BDB::INIT_TXN,
67 0666; 75 0666;
76sub table($) { 84sub table($) {
77 $DB_TABLE{$_[0]} ||= do { 85 $DB_TABLE{$_[0]} ||= do {
78 my ($table) = @_; 86 my ($table) = @_;
79 87
80 $table =~ s/([^a-zA-Z0-9_\-])/sprintf "=%x=", ord $1/ge; 88 $table =~ s/([^a-zA-Z0-9_\-])/sprintf "=%x=", ord $1/ge;
89
90 $DB_ENV#d#
91 or return ::clienterror ("trying to create table $_[0] with empty db_env $DB_ENV" => 1);#d#
81 92
82 my $db = db_create $DB_ENV; 93 my $db = db_create $DB_ENV;
83 $db->set_flags (BDB::CHKSUM); 94 $db->set_flags (BDB::CHKSUM);
84 95
85 db_open $db, undef, $table, undef, BDB::BTREE, 96 db_open $db, undef, $table, undef, BDB::BTREE,
150 db_get $table, undef, $name => $id, 0; 161 db_get $table, undef, $name => $id, 0;
151 $! or return $cb->($id); 162 $! or return $cb->($id);
152 163
153 unless ($TILE_SEQ) { 164 unless ($TILE_SEQ) {
154 $TILE_SEQ = $table->sequence; 165 $TILE_SEQ = $table->sequence;
155 $TILE_SEQ->initial_value (64); 166 $TILE_SEQ->initial_value (FIRST_TILE_ID);
156 $TILE_SEQ->set_cachesize (0); 167 $TILE_SEQ->set_cachesize (0);
157 db_sequence_open $TILE_SEQ, undef, "id", BDB::CREATE; 168 db_sequence_open $TILE_SEQ, undef, "id", BDB::CREATE;
158 } 169 }
159 170
160 db_sequence_get $TILE_SEQ, undef, 1, my $id; 171 db_sequence_get $TILE_SEQ, undef, 1, my $id;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines