mirror of
https://codeberg.org/scip/note.git
synced 2025-12-17 12:41:10 +01:00
FIXED: There were many new bugs after my last changes *grrrrr*. fixed.
Works now properly, with both backends!
FIXED: and another bug: recounting of numbers did not take care about
the existing order! If you deleted note #12, then note #13 became
not neccessarily #12! Instead it becames any other number (kind of
randomly...).
CHANGED: NOTEDB::binary set_del function changed, it does no more require
a temporary file for number recount. Instead it uses get_all and
stores all notes in RAM and then rewrites the database.
FIXED: fixed the set_new call within note. It used 0 as the first param
(number) which is not useful since we dont have support for auto-
increment from all database backends.
FIXED: fixed the function set_recountnum in NITEDB::mysql, it was also
incorrect :-((( 0.8 seemed to be a very bad early alpha...........
FIXED: there was a bug in NOTEDB::binary which caused not to recount note
numbers after deleting one :-(
This commit is contained in:
21
Changelog
21
Changelog
@@ -1,5 +1,26 @@
|
|||||||
==================================================================================
|
==================================================================================
|
||||||
|
|
||||||
|
0.9:
|
||||||
|
FIXED: There were many new bugs after my last changes *grrrrr*. fixed.
|
||||||
|
Works now properly, with both backends!
|
||||||
|
FIXED: and another bug: recounting of numbers did not take care about
|
||||||
|
the existing order! If you deleted note #12, then note #13 became
|
||||||
|
not neccessarily #12! Instead it becames any other number (kind of
|
||||||
|
randomly...).
|
||||||
|
CHANGED: NOTEDB::binary set_del function changed, it does no more require
|
||||||
|
a temporary file for number recount. Instead it uses get_all and
|
||||||
|
stores all notes in RAM and then rewrites the database.
|
||||||
|
FIXED: fixed the set_new call within note. It used 0 as the first param
|
||||||
|
(number) which is not useful since we dont have support for auto-
|
||||||
|
increment from all database backends.
|
||||||
|
FIXED: fixed the function set_recountnum in NITEDB::mysql, it was also
|
||||||
|
incorrect :-((( 0.8 seemed to be a very bad early alpha...........
|
||||||
|
FIXED: there was a bug in NOTEDB::binary which caused not to recount note
|
||||||
|
numbers after deleting one :-(
|
||||||
|
|
||||||
|
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
0.8:
|
0.8:
|
||||||
ADDED: NOTEDB::binary. so now 0.8 is ready for shipping !
|
ADDED: NOTEDB::binary. so now 0.8 is ready for shipping !
|
||||||
FIXED: regexp bug fixed. It was only possible to delete 2 items together
|
FIXED: regexp bug fixed. It was only possible to delete 2 items together
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
|
# $Id: binary.pm,v 1.3 2000/03/20 00:36:50 thomas Exp thomas $
|
||||||
|
# Perl module for note
|
||||||
|
# binary database backend. see docu: perldoc NOTEDB::binary
|
||||||
|
#
|
||||||
use strict;
|
use strict;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
use IO::Seekable;
|
use IO::Seekable;
|
||||||
@@ -8,7 +12,7 @@ use Fcntl qw(LOCK_EX LOCK_UN);
|
|||||||
|
|
||||||
# Globals:
|
# Globals:
|
||||||
my ($NOTEDB, $sizeof, $typedef,$version);
|
my ($NOTEDB, $sizeof, $typedef,$version);
|
||||||
$version = "(NOTEDB::binary, 1.1)";
|
$version = "(NOTEDB::binary, 1.3)";
|
||||||
|
|
||||||
|
|
||||||
sub new
|
sub new
|
||||||
@@ -107,7 +111,7 @@ sub get_nextnum
|
|||||||
while(read(NOTE, $buffer, $sizeof)) {
|
while(read(NOTE, $buffer, $sizeof)) {
|
||||||
($num, $te, $me) = unpack($typedef, $buffer);
|
($num, $te, $me) = unpack($typedef, $buffer);
|
||||||
}
|
}
|
||||||
$num++;
|
$num += 1;
|
||||||
flock NOTE, LOCK_UN;
|
flock NOTE, LOCK_UN;
|
||||||
close NOTE;
|
close NOTE;
|
||||||
|
|
||||||
@@ -142,38 +146,6 @@ sub get_search
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub set_recountnums
|
|
||||||
{
|
|
||||||
my $this = shift;
|
|
||||||
my(@count, $i, $num, $setnum, $buffer, $buff, $note, $date);
|
|
||||||
|
|
||||||
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
|
|
||||||
flock NOTE, LOCK_EX;
|
|
||||||
|
|
||||||
$setnum = 1;
|
|
||||||
my $TEMP = "/tmp/note.$$"; # save temporarily in $TEMP
|
|
||||||
system("/bin/touch", $TEMP);
|
|
||||||
open TEMP, "+<$TEMP" or die "Could not open $TEMP($!)\n";
|
|
||||||
|
|
||||||
seek(NOTE, 0, 0); # START FROM BEGINNING
|
|
||||||
while(read(NOTE, $buffer, $sizeof)) {
|
|
||||||
($num, $note, $date) = unpack($typedef, $buffer);
|
|
||||||
$buff = pack($typedef, $setnum, $note, $date);
|
|
||||||
seek(TEMP, 0, IO::Seekable::SEEK_END); # APPEND
|
|
||||||
print TEMP $buffer;
|
|
||||||
$setnum++;
|
|
||||||
}
|
|
||||||
close(TEMP);
|
|
||||||
|
|
||||||
flock NOTE, LOCK_UN;
|
|
||||||
close NOTE;
|
|
||||||
|
|
||||||
system("/bin/cp",$TEMP, $NOTEDB);
|
|
||||||
|
|
||||||
unlink $TEMP;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub set_edit
|
sub set_edit
|
||||||
{
|
{
|
||||||
@@ -215,40 +187,55 @@ sub set_new
|
|||||||
sub set_del
|
sub set_del
|
||||||
{
|
{
|
||||||
my($this, $num) = @_;
|
my($this, $num) = @_;
|
||||||
my($note, $date, $T, $setnum, $buffer, $buff, $n);
|
my(%orig, $note, $date, $T, $setnum, $buffer, $n, $N, $t);
|
||||||
|
|
||||||
$setnum = 1;
|
$setnum = 1;
|
||||||
my $TEMP = "/tmp/note.$$"; # save temporarily in $TEMP
|
|
||||||
system("/bin/touch", $TEMP);
|
|
||||||
open TEMP, "+<$TEMP" or die "Could not open $TEMP($!)\n";
|
|
||||||
|
|
||||||
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
|
%orig = $this->get_all();
|
||||||
|
return "ERROR" if (! exists $orig{$num});
|
||||||
|
|
||||||
|
delete $orig{$num};
|
||||||
|
|
||||||
|
# overwrite, but keep number!
|
||||||
|
open NOTE, ">$NOTEDB" or die "could not open $NOTEDB\n";
|
||||||
flock NOTE, LOCK_EX;
|
flock NOTE, LOCK_EX;
|
||||||
|
|
||||||
seek(NOTE, 0, 0); # START FROM BEGINNING
|
seek(NOTE, 0, 0); # START FROM BEGINNING
|
||||||
while(read(NOTE, $buffer, $sizeof)) {
|
foreach $N (keys %orig) {
|
||||||
($n, $note, $date) = unpack($typedef, $buffer);
|
$n = uen($orig{$N}->{'note'});
|
||||||
$buff = pack($typedef, $setnum, $note, $date);
|
$t = uen($orig{$N}->{'date'});
|
||||||
if($n != $num) {
|
$buffer = pack( $typedef, $N, $n, $t); # keep orig number, note have to call recount!
|
||||||
seek(TEMP, 0, IO::Seekable::SEEK_END); # APPEND
|
print NOTE $buffer;
|
||||||
print TEMP $buff;
|
seek(NOTE, 0, IO::Seekable::SEEK_END);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$T = $date;
|
|
||||||
}
|
|
||||||
$setnum++;
|
$setnum++;
|
||||||
}
|
}
|
||||||
close(TEMP);
|
|
||||||
|
|
||||||
flock NOTE, LOCK_UN;
|
flock NOTE, LOCK_UN;
|
||||||
close NOTE;
|
close NOTE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
system("/bin/cp",$TEMP, $NOTEDB);
|
sub set_recountnums
|
||||||
|
{
|
||||||
|
my($this) = @_;
|
||||||
|
my(%orig, $note, $date, $T, $setnum, $buffer, $n, $N, $t);
|
||||||
|
|
||||||
unlink $TEMP;
|
$setnum = 1;
|
||||||
|
%orig = $this->get_all();
|
||||||
|
|
||||||
return "ERROR" if($T eq ""); # signal success!
|
open NOTE, ">$NOTEDB" or die "could not open $NOTEDB\n";
|
||||||
|
flock NOTE, LOCK_EX;
|
||||||
|
seek(NOTE, 0, 0); # START FROM BEGINNING
|
||||||
|
|
||||||
|
foreach $N (sort {$a <=> $b} keys %orig) {
|
||||||
|
$n = uen($orig{$N}->{'note'});
|
||||||
|
$t = uen($orig{$N}->{'date'});
|
||||||
|
$buffer = pack( $typedef, $setnum, $n, $t);
|
||||||
|
print NOTE $buffer;
|
||||||
|
seek(NOTE, 0, IO::Seekable::SEEK_END);
|
||||||
|
$setnum++;
|
||||||
|
}
|
||||||
|
flock NOTE, LOCK_UN;
|
||||||
|
close NOTE;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub uen
|
sub uen
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
|
# $Id: mysql.pm,v 1.2 2000/03/20 00:36:55 thomas Exp thomas $
|
||||||
|
# Perl module for note
|
||||||
|
# mysql database backend. see docu: perldoc NOTEDB::binary
|
||||||
|
#
|
||||||
|
|
||||||
use DBI;
|
use DBI;
|
||||||
use strict;
|
use strict;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
@@ -11,7 +16,7 @@ $table = "note";
|
|||||||
$fnum = "number";
|
$fnum = "number";
|
||||||
$fnote = "note";
|
$fnote = "note";
|
||||||
$fdate = "date";
|
$fdate = "date";
|
||||||
$version = "(NOTEDB::mysql, 1.0)";
|
$version = "(NOTEDB::mysql, 1.2)";
|
||||||
|
|
||||||
# prepare some std statements... #####################################################################
|
# prepare some std statements... #####################################################################
|
||||||
my $sql_getsingle = "SELECT $fnote,$fdate FROM $table WHERE $fnum = ?";
|
my $sql_getsingle = "SELECT $fnote,$fdate FROM $table WHERE $fnum = ?";
|
||||||
@@ -124,24 +129,6 @@ sub get_search
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub set_recountnums
|
|
||||||
{
|
|
||||||
my $this = shift;
|
|
||||||
my(@count, $i, $num, $setnum);
|
|
||||||
$setnum = 1;
|
|
||||||
my $statement = $DB->prepare($sql_incrnum) || die $DB->errstr();
|
|
||||||
my $sub_statement = $DB->prepare($sql_setnum) || die $DB->errstr();
|
|
||||||
|
|
||||||
$statement->execute || die $DB->errstr();
|
|
||||||
$statement->bind_columns(undef, \($num)) || die $DB->errstr();
|
|
||||||
|
|
||||||
while($statement->fetch) {
|
|
||||||
$sub_statement->execute($setnum,$num) || die $DB->errstr();
|
|
||||||
$setnum++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub set_edit
|
sub set_edit
|
||||||
{
|
{
|
||||||
@@ -172,23 +159,40 @@ sub set_del
|
|||||||
my($this, $num) = @_;
|
my($this, $num) = @_;
|
||||||
my($note, $date, $T);
|
my($note, $date, $T);
|
||||||
|
|
||||||
my $stat = $DB->prepare($sql_getsingle) || die $DB->errstr();
|
($note, $date) = $this->get_single($num);
|
||||||
$stat->execute($num) || die $DB->errstr();
|
|
||||||
$stat->bind_columns(undef, \($note, $date)) || die $DB->errstr();
|
|
||||||
while($stat->fetch) {
|
|
||||||
$T = $date;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return "ERROR" if ($date !~ /^\d/);
|
||||||
|
|
||||||
|
# delete record!
|
||||||
my $statement = $DB->prepare($sql_del) || die $DB->errstr();
|
my $statement = $DB->prepare($sql_del) || die $DB->errstr();
|
||||||
|
|
||||||
$statement->execute($num) || die $DB->errstr();
|
$statement->execute($num) || die $DB->errstr();
|
||||||
|
return;
|
||||||
$this->set_recountnums();
|
|
||||||
|
|
||||||
return "ERROR" if($T eq ""); # signal success!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub set_recountnums
|
||||||
|
{
|
||||||
|
my $this = shift;
|
||||||
|
my(@count, $i, $num, $setnum, $pos);
|
||||||
|
$setnum = 1;
|
||||||
|
$pos=0; $i=0; @count = ();
|
||||||
|
|
||||||
|
my $statement = $DB->prepare($sql_incrnum) || die $DB->errstr();
|
||||||
|
$statement->execute || die $DB->errstr();
|
||||||
|
$statement->bind_columns(undef, \($num)) || die $DB->errstr();
|
||||||
|
# store real id's in an array!
|
||||||
|
while($statement->fetch) {
|
||||||
|
$count[$i] = $num;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
# now recount them!
|
||||||
|
my $sub_statement = $DB->prepare($sql_setnum) || die $DB->errstr();
|
||||||
|
for($pos=0;$pos<$i;$pos++) {
|
||||||
|
$setnum = $pos +1;
|
||||||
|
$sub_statement->execute($setnum,$count[$pos]) || die $DB->errstr();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
1; # keep this!
|
1; # keep this!
|
||||||
|
|
||||||
|
|||||||
2
README
2
README
@@ -1,4 +1,4 @@
|
|||||||
note 0.8 by Thomas Linden, 19/03/2000
|
note 0.9 by Thomas Linden, 20/03/2000
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
|
|||||||
32
UPGRADE
32
UPGRADE
@@ -1,3 +1,29 @@
|
|||||||
if you are upgrading an existing note installation,
|
In any case: BACKUP your existing note database!!!!!!!
|
||||||
you need to reedit your configfile, since there are now
|
The format has not changed, but some default values
|
||||||
some new required options!
|
(see the new config file-sample). Use this command
|
||||||
|
to save your note database with your *old* version
|
||||||
|
of note:
|
||||||
|
"note -D"
|
||||||
|
This works with both the mysql and the binary version.
|
||||||
|
|
||||||
|
You need to reedit your configfile, since there are now
|
||||||
|
some new required options! The most important: $dbdriver.
|
||||||
|
|
||||||
|
If you used previously a binary db without a config, then
|
||||||
|
you will get trouble with your existing notedb because the
|
||||||
|
default values for field sizes has been changed (it was too
|
||||||
|
small)! You have two choices:
|
||||||
|
1. make a database dump ("note -D") with your old note-version.
|
||||||
|
2. remove your existing .notedb (and/or back it up!)
|
||||||
|
3. install the new note version
|
||||||
|
4. import the previously created dump ("note -I note.dump.23112")
|
||||||
|
or
|
||||||
|
Edit the config to reflect your field size settings. Set the
|
||||||
|
fields MAX_TIME=64 and MAX_NOTE=1024 (which was the default of
|
||||||
|
previous versions of note).
|
||||||
|
|
||||||
|
|
||||||
|
AGAIN: YOU HAVE BEEN WARNED! DO NOT UPGRADE WITHOUT MADE A
|
||||||
|
BACKUP OF YOUR DATABASE! I AM NOT RESPONSIBLE IF YOU
|
||||||
|
LOOSE DATA!
|
||||||
|
|
||||||
|
|||||||
23
bin/note
23
bin/note
@@ -1,7 +1,15 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
# $Author: thomas $ $Id: note,v 1.13 2000/03/19 11:53:32 thomas Exp thomas $ $Revision: 1.13 $
|
# $Author: thomas $ $Id: note,v 1.15 2000/03/19 23:41:04 thomas Exp thomas $ $Revision: 1.15 $
|
||||||
#
|
#
|
||||||
# $Log: note,v $
|
# $Log: note,v $
|
||||||
|
# Revision 1.15 2000/03/19 23:41:04 thomas
|
||||||
|
# changed set_del, now no extra TEMP file is required!
|
||||||
|
# instead I get it from $this->get_all() !
|
||||||
|
#
|
||||||
|
# Revision 1.14 2000/03/19 22:51:49 thomas
|
||||||
|
# Bug in NOTEDB::binary fixed, recount of nubers was
|
||||||
|
# incorrect.
|
||||||
|
#
|
||||||
# Revision 1.13 2000/03/19 11:53:32 thomas
|
# Revision 1.13 2000/03/19 11:53:32 thomas
|
||||||
# edit bug fixed (ude => uen)
|
# edit bug fixed (ude => uen)
|
||||||
#
|
#
|
||||||
@@ -115,7 +123,7 @@ $TIME_COLOR = "black";
|
|||||||
$TOPIC_COLOR = "BLACK";
|
$TOPIC_COLOR = "BLACK";
|
||||||
$TOPIC = 1;
|
$TOPIC = 1;
|
||||||
$TopicSep = '/';
|
$TopicSep = '/';
|
||||||
$version = "0.8 r1.12";
|
$version = "0.9 r1.15";
|
||||||
if($TOPIC)
|
if($TOPIC)
|
||||||
{
|
{
|
||||||
$CurDepth = 1; # the current depth inside the topic "directory" structure...
|
$CurDepth = 1; # the current depth inside the topic "directory" structure...
|
||||||
@@ -602,6 +610,8 @@ sub del
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
# recount the notenumbers:
|
# recount the notenumbers:
|
||||||
|
$db->set_recountnums();
|
||||||
|
|
||||||
@NumBlock = ();
|
@NumBlock = ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -683,7 +693,7 @@ sub dump
|
|||||||
|
|
||||||
sub import
|
sub import
|
||||||
{
|
{
|
||||||
my($num, $start, $complete, $dummi, $note, $date, $time);
|
my($num, $start, $complete, $dummi, $note, $date, $time, $number);
|
||||||
# open $dump_file and import it into the notedb
|
# open $dump_file and import it into the notedb
|
||||||
open (DUMP, "<$dump_file") or die "could not open $dump_file\n";
|
open (DUMP, "<$dump_file") or die "could not open $dump_file\n";
|
||||||
$complete=0;
|
$complete=0;
|
||||||
@@ -702,7 +712,8 @@ sub import
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
# we got a complete record, save it!
|
# we got a complete record, save it!
|
||||||
$db->set_new(0,$note, $date);
|
$number = $db->get_nextnum();
|
||||||
|
$db->set_new($number,$note, $date);
|
||||||
print "note number $number from $dump_file inserted into notedb.\n";
|
print "note number $number from $dump_file inserted into notedb.\n";
|
||||||
$complete = 0;
|
$complete = 0;
|
||||||
$note = "";
|
$note = "";
|
||||||
@@ -724,7 +735,8 @@ sub import
|
|||||||
if($note ne "" && $date ne "")
|
if($note ne "" && $date ne "")
|
||||||
{
|
{
|
||||||
# the last record, if existent
|
# the last record, if existent
|
||||||
$db->set_new(0,$note, $date);
|
$number = $db->get_nextnum();
|
||||||
|
$db->set_new($number,$note, $date);
|
||||||
print "note number $number from $dump_file inserted into notedb.\n";
|
print "note number $number from $dump_file inserted into notedb.\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1124,6 +1136,7 @@ sub num_bereich
|
|||||||
my($m,@LR,@Sorted_LR,$i);
|
my($m,@LR,@Sorted_LR,$i);
|
||||||
# $number is the one we want to delete!
|
# $number is the one we want to delete!
|
||||||
# But does it contain kommas?
|
# But does it contain kommas?
|
||||||
|
@NumBlock = (); #reset
|
||||||
$m = 0;
|
$m = 0;
|
||||||
if($number =~ /\,/)
|
if($number =~ /\,/)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user