Changeset: 012487fb125c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=012487fb125c
Modified Files:
MonetDB.spec
clients/R/MonetDB.R/DESCRIPTION
clients/ruby/ruby-monetdb-sql-0.2.gemspec
common/utils/msabaoth.c
Branch: default
Log Message:
Merge with Jul2015 branch.
diffs (141 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -1,6 +1,6 @@
%define name MonetDB
%define version 11.22.0
-%{!?buildno: %define buildno %(date +%Y%m%d)}
+%{!?buildno: %global buildno %(date +%Y%m%d)}
# groups of related archs
%define all_x86 i386 i586 i686
@@ -422,7 +422,9 @@ program.
%files -n rubygem-monetdb-sql
%defattr(-,root,root)
%docdir %{gem_dir}/doc/ruby-monetdb-sql-0.2
+%if (0%{?fedora} <= 23)
%{gem_dir}/doc/ruby-monetdb-sql-0.2/*
+%endif
%{gem_dir}/cache/ruby-monetdb-sql-0.2.gem
# %dir %{gem_dir}/gems/ruby-monetdb-sql-0.2
%{gem_dir}/gems/ruby-monetdb-sql-0.2
diff --git a/clients/R/MonetDB.R/DESCRIPTION b/clients/R/MonetDB.R/DESCRIPTION
--- a/clients/R/MonetDB.R/DESCRIPTION
+++ b/clients/R/MonetDB.R/DESCRIPTION
@@ -10,7 +10,7 @@ Depends: DBI (>= 0.3.1)
Imports: digest (>= 0.6.4), methods, codetools
Enhances: dplyr (>= 0.3.0)
Description: Allows to pull data from MonetDB into R. Includes a DBI
implementation and a dplyr backend.
-License: MPL (== 1.1)
+License: MPL (== 2.0)
URL: http://monetr.r-forge.r-project.org
SystemRequirements: MonetDB, available from http://www.monetdb.org
Collate: mapi.R dbi.R dbapply.R dplyr.R control.R
diff --git a/clients/ruby/ruby-monetdb-sql-0.2.gemspec
b/clients/ruby/ruby-monetdb-sql-0.2.gemspec
--- a/clients/ruby/ruby-monetdb-sql-0.2.gemspec
+++ b/clients/ruby/ruby-monetdb-sql-0.2.gemspec
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
s.date = %q{2015-10-29}
s.authors = ["G Modena", "R Koopmanschap"]
s.email = "[email protected]"
- s.license = "MPL-1.1"
+ s.license = "MPL-2.0"
s.summary = %q{Pure Ruby database driver for MonetDB/SQL}
s.homepage = %q{http://www.monetdb.org/}
s.description = %q{Pure Ruby database driver for the MonetDB/SQL columnar
database management system}
diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c
--- a/common/utils/msabaoth.c
+++ b/common/utils/msabaoth.c
@@ -30,6 +30,7 @@
#include <time.h>
#include <string.h> /* for getting error messages */
#include <assert.h>
+#include <stddef.h>
#include "msabaoth.h"
#include "mutils.h"
@@ -93,6 +94,35 @@ getDBPath(char *pathbuf, size_t size, co
return(NULL);
}
+static inline int
+msab_isuuid(const char *restrict s)
+{
+ int hyphens = 0;
+
+ /* correct length */
+ if (strlen(s) != 36)
+ return 0;
+
+ /* hyphens at correct locations */
+ if (s[8] != '-' ||
+ s[13] != '-' ||
+ s[18] != '-' ||
+ s[23] != '-')
+ return 0;
+ /* only hexadecimals and hypens */
+ while (*s) {
+ if (!('a' <= *s && *s <= 'f') && !('0' <= *s && *s <= '9')) {
+ if (*s == '-')
+ hyphens++;
+ else
+ return 0;
+ }
+ s++;
+ }
+ /* correct number of hyphens */
+ return hyphens == 4;
+}
+
/**
* Initialises this Sabaoth instance to use the given dbfarm and dbname.
* dbname may be NULL to indicate that there is no active database. The
@@ -102,6 +132,8 @@ static void
msab_init(const char *dbfarm, const char *dbname)
{
size_t len;
+ DIR *d;
+ char *tmp;
assert(dbfarm != NULL);
@@ -134,6 +166,39 @@ msab_init(const char *dbfarm, const char
} else {
_sabaoth_internal_dbname = strdup(dbname);
}
+
+ /* clean out old UUID files in case the database crashed in a
+ * previous incarnation */
+ if (_sabaoth_internal_dbname != NULL &&
+ (tmp = malloc(strlen(_sabaoth_internal_dbfarm) +
strlen(_sabaoth_internal_dbname) + 2)) != NULL) {
+ sprintf(tmp, "%s%c%s", _sabaoth_internal_dbfarm, DIR_SEP,
_sabaoth_internal_dbname);
+ if ((d = opendir(tmp)) != NULL) {
+ struct dbe {
+ struct dbe *next;
+ char path[FLEXIBLE_ARRAY_MEMBER];
+ } *dbe = NULL, *db;
+ struct dirent *e;
+ len = offsetof(struct dbe, path) + strlen(tmp) + 2;
+ while ((e = readdir(d)) != NULL) {
+ if (msab_isuuid(e->d_name) &&
+ (db = malloc(strlen(e->d_name) + len))
!= NULL) {
+ db->next = dbe;
+ dbe = db;
+ sprintf(db->path, "%s%c%s", tmp,
DIR_SEP, e->d_name);
+ }
+ }
+ closedir(d);
+ /* unlink in a separate loop after reading the
directory,
+ * so as to not have any interference */
+ while (dbe != NULL) {
+ unlink(dbe->path);
+ db = dbe;
+ dbe = dbe->next;
+ free(db);
+ }
+ }
+ free(tmp);
+ }
}
void
msab_dbpathinit(const char *dbpath)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list