Commit 345114c0 authored by Viktor Horvath's avatar Viktor Horvath

Makefile separation: fix errors when an empty database "mioga2" exists (with or without tables).

parent a0000542
......@@ -12,7 +12,7 @@ index ef0f369..b275a48 100644
This script must be run by cron in a day basis with apache user (www-data for Debian)
diff --git a/Makefile.PL b/Makefile.PL
index 3582d20..80ea444 100644
index 3582d20..c24e217 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -20,8 +20,10 @@
......@@ -83,16 +83,16 @@ index 3582d20..80ea444 100644
+ # copy a minimal build system into mioga/build
+ mkdir -p "$(MIOGA_BUILDINST)"
+ cp -R --parents \
+ Makefile.PL sql web/conf conf bin/search/crawl_sample.sh \
+ Makefile.PL sql web/conf web/skel conf bin/search/crawl_sample.sh \
+ "$(MIOGA_BUILDINST)"
+
+slapos-instantiation ::
+ rm -Rf web/conf/apache; (cd web/conf && $(MAKE) apache)
+
+ for i in web/conf conf web/skel sql ; \
+ do \
+ (cd $$i && $(MAKE) install) || exit 1;\
+ done
+
+ (cd web && $(MAKE) setperms) || exit 1;
+
doc:
for i in ' . $docsubdirs . ' ; \
......@@ -320,21 +320,44 @@ index 4afa54b..ca8368c 100644
$self->{dbh} = DBI->connect($datasource, $dbiUser, $dbiPassword);
diff --git a/lib/Mioga2/Exception/DB.pm b/lib/Mioga2/Exception/DB.pm
index 7ce5020..bee00ca 100644
index 7ce5020..dd29d83 100644
--- a/lib/Mioga2/Exception/DB.pm
+++ b/lib/Mioga2/Exception/DB.pm
@@ -76,6 +76,17 @@ sub as_string
@@ -1,3 +1,4 @@
+
# ============================================================================
# Mioga2 Project (C) 2003-2007 The Mioga2 Project
#
@@ -53,6 +54,7 @@ sub new {
my($class, $function, $errDB, $errStr, $sql) = @_;
my $self = $class->SUPER::new(-text => "$errStr : $errDB");
$self->{errDB} = $errDB;
+ $self->{errStr} = $errStr;
$self->{sql} = $sql;
$self->{function} = $function;
return $self;
@@ -76,6 +78,27 @@ sub as_string
return $string;
}
+# ----------------------------------------------------------------------------
+=head2 getDBerror ()
+Return the error as sent by the database connector.
+=head2 getDBerr ()
+Return the error code as sent by the database connector.
+=cut
+# ----------------------------------------------------------------------------
+sub getDBerr {
+ my ($self) = @_;
+ return $self->{errDB};
+}
+
+# ----------------------------------------------------------------------------
+=head2 getDBerrstr ()
+Return the error string as sent by the database connector.
+=cut
+# ----------------------------------------------------------------------------
+sub getDBerror {
+sub getDBerrstr {
+ my ($self) = @_;
+ return $self->{errDB}
+ return $self->{errStr};
+}
+
+
......@@ -514,21 +537,17 @@ index 0870174..bbcc80a 100644
foreach my $dep (@{$self->{CONFIG}->{dependencies}->[0]->{clib}}) {
my $version;
diff --git a/sql/Makefile b/sql/Makefile
index 07b26f5..f6b6c0f 100644
index 07b26f5..63b7d0c 100644
--- a/sql/Makefile
+++ b/sql/Makefile
@@ -1,4 +1,5 @@
include ../config.mk
+DB_STATE=`perl -w testdb.pl`
all:
@@ -15,19 +16,20 @@ install:
@@ -15,19 +15,22 @@ install:
cp upgradeMiogletDesc.pl $(DESTDIR)$(INSTALL_DIR)/conf/Config.hook.d
chmod a+x $(DESTDIR)$(INSTALL_DIR)/conf/Config.hook.d/upgradeMiogletDesc.pl
- if [ $(INIT_SQL) = 'yes' ] ; \
+ if [ $(DB_STATE) = 'nodb' ] ; \
+ DB_STATE=`perl -w testdb.pl`; \
+ echo "VHH DEBUG: Makefile got DB_STATE '$$DB_STATE'"; \
+ if [ "$$DB_STATE" = "nodb" -o "$$DB_STATE" = "empty" ] ; \
then \
echo "Initialize database"; \
- su - $(POSTGRES_USER) -c "dropdb $(DB_NAME)" ; \
......@@ -540,10 +559,10 @@ index 07b26f5..f6b6c0f 100644
+ createdb --encoding UTF8 -h $(DB_HOST) -p $(DB_PORT) -U $(DBI_LOGIN) $(DB_NAME) && \
+ psql -h $(DB_HOST) -p $(DB_PORT) -U $(DBI_LOGIN) $(DB_NAME) < create_lang.sql && \
+ perl -w -I../lib initdb.pl force_init_sql=1; \
+ elif [ $(DB_STATE) = 'present' ]; then \
+ elif [ "$$DB_STATE" = "present" ]; then \
echo "Update database"; \
perl -w -I../lib updatedb.pl configxml=$(DESTDIR)$(INSTALL_DIR)/conf/Config.xml; \
+ elif [ $(DB_STATE) = 'noserver' ]; then \
+ elif [ "$$DB_STATE" = "noserver" ]; then \
+ echo "ERROR: Cannot connect to the database server!"; \
fi
......@@ -579,15 +598,16 @@ index b7d8cc2..88d5e2d 100644
-- Add referencial integrity on default_profile_id in m_group_base
diff --git a/sql/testdb.pl b/sql/testdb.pl
new file mode 100755
index 0000000..2fa3fe7
index 0000000..cfbff33
--- /dev/null
+++ b/sql/testdb.pl
@@ -0,0 +1,37 @@
@@ -0,0 +1,75 @@
+#!/usr/bin/perl -w
+
+# Tests the availability of the Mioga2 database.
+# Returns on stdout one of:
+# 'present' - The Mioga2 database has been found.
+# 'present' - The Mioga2 database has been found and contains data.
+# 'empty' - The Mioga2 database exists but the table "m_mioga" is empty or nonexistent.
+# 'nodb' - There is no Mioga2 database but the database server is working fine
+# (i.e. one can try to create the database)
+# 'noserver' - Connection to the database server failed.
......@@ -599,6 +619,7 @@ index 0000000..2fa3fe7
+use lib "../lib";
+
+use Data::Dumper;
+use DBI;
+use Error qw(:try);
+use Mioga2::Exception::DB;
+use Mioga2::MiogaConf;
......@@ -607,19 +628,55 @@ index 0000000..2fa3fe7
+# my $configxml = "../conf/Config.xml";
+my $miogaconf = "../web/conf/Mioga.conf";
+
+print STDERR "VHH DEBUG: Starting testdb.pl\n";
+my $result = 'undefined';
+try {
+ print STDERR "VHH DEBUG: creating MiogaConf object...\n";
+ my $config = new Mioga2::MiogaConf($miogaconf);
+ print 'present';
+ print STDERR "VHH DEBUG: created MiogaConf\n";
+ my $dbh = $config->GetDBH();
+ print STDERR "VHH DEBUG: got dbh\n";
+ my $sql = 'SELECT COUNT(*) FROM m_mioga';
+ my $sth = $dbh->prepare($sql);
+ print STDERR "VHH DEBUG: prepared statement\n";
+ my $exec_result = $sth->execute();
+ print STDERR "VHH DEBUG: executed statement\n";
+ if (not defined($exec_result)) {
+ throw Mioga2::Exception::DB("testdb.pl 0", $sth->err, $sth->errstr, $sql);
+ }
+ my $res = $sth->fetchrow_arrayref();
+ if (not defined($res)) {
+ throw Mioga2::Exception::DB("testdb.pl 1", $sth->err, $sth->errstr, $sql);
+ }
+ my $count = $res->[0];
+ print STDERR "VHH DEBUG: got count\n";
+ if (not defined($count)) {
+ throw Mioga2::Exception::DB("testdb.pl 2", $sth->err, $sth->errstr, $sql);
+ } elsif ($count == 0) {
+ $result = 'empty';
+ } else {
+ $result = 'present';
+ }
+} catch Mioga2::Exception::DB with {
+ my $err = shift;
+ if ($err->getDBerror() =~ m#database "mioga2" does not exist#) {
+ print 'nodb';
+ my $errstr = $err->getDBerrstr();
+ print STDERR "VHH DEBUG: got exception...\n";
+ print STDERR "VHH DEBUG: got error string: ".$err->as_string()."\n";
+ if ($errstr =~ m#database "mioga2" does not exist#) {
+ $result = 'nodb';
+ } elsif ($errstr =~ m#relation "m_mioga" does not exist#) {
+ $result = 'empty';
+ } else {
+ print 'noserver';
+ $result = 'noserver';
+ }
+} otherwise {
+ print 'noserver';
+}
+ my $err = shift;
+ print STDERR "VHH DEBUG: got other exception: $err\n";
+ $result = 'noserver';
+};
+
+print $result;
+print STDERR "VHH DEBUG: result = ".$result."\n";
diff --git a/web/Makefile b/web/Makefile
index 66af45f..9649a02 100644
--- a/web/Makefile
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment