Compare commits

...

31 commits

Author SHA1 Message Date
f0d35340b4 K&R no more 2024-05-08 15:59:52 -04:00
d9b6876ec2 fixes 2024-03-11 11:41:54 -04:00
7ce1172dcd fixes 2023-10-23 12:00:50 -04:00
bdd732cef7 numerous fixes 2023-10-21 13:06:35 -04:00
8f5855b6b6 update to match api 2023-10-19 16:46:02 -04:00
564194378e upkeep 2023-10-19 14:48:01 -04:00
8136693f9a conditionally add sys/time.h 2023-10-19 14:47:16 -04:00
b1cbd35bfe activate flake using direnv 2023-10-19 14:46:38 -04:00
24e4f0d609 update readme 2023-10-19 14:46:22 -04:00
8874d3bfd0 ignore things 2023-10-19 14:46:02 -04:00
1f471e54a2 add Nix flake, shell 2023-10-19 14:45:46 -04:00
5dc705134e update autoconf 2023-10-19 14:38:33 -04:00
1f559179ca Update README.md 2023-10-18 22:55:38 +00:00
Gregory Burd
f95927f880 Create README.md 2014-04-14 13:43:23 -04:00
Gregory Burd
fb683f6a7e Whitespace, cleanup, and work to get the test harness functional
again.  It compiles, but still needs to be debugged.  Then, it's
time to run the tests and fix everything they find (a lot I
expect).
2009-09-03 17:31:03 -04:00
Gregory Burd
e7dc5d2d04 Update project todo and build notes. 2009-09-02 20:52:49 -04:00
Gregory Burd
41daff7e7c Minor fix. 2009-09-01 21:58:47 -04:00
Gregory Burd
c39ba47f61 Finished a pass over all the non-SQLite derrived tests (which all
live in scr050) and brought them up to date, some minor fixes along
the way.  A few tests don't work properly, I've noted those in the
TODO file for some other time.
2009-09-01 19:21:41 -04:00
Gregory Burd
62311bde64 Fixing the non-SQLite tests, the ones adopted from DB. 2009-09-01 09:55:43 -04:00
Gregory Burd
f157b8d0e4 valgrind 2009-09-01 09:50:10 -04:00
Gregory Burd
119ffe556f Try to keep track of pending items. 2009-08-31 22:41:32 -04:00
Gregory Burd
af3f20bc88 Change from db_align types to more sane/generic names in types.m4. 2009-08-31 22:40:49 -04:00
Gregory Burd
7905a5a889 Fix a few more places where I forgot to put in a format string. 2009-08-31 22:39:57 -04:00
Gregory Burd
2efb391318 FIXME: So in db-4.8 __os_sleep() is static (sigh) meaning that I
can't reuse it (and thus save static code size).  For now, comment
out the calls to __os_sleep() until I can determine how exactly to
fix this.
2009-08-31 22:37:25 -04:00
Gregory Burd
ab634c1bbb Turns out we needed that long_double_t type after all. 2009-08-31 22:11:14 -04:00
Gregory Burd
5009f7bde7 Updated typenames in the code to their new names in the aclocal
scripts.
2009-08-31 21:17:21 -04:00
Gregory Burd
d5f6575a7c More house keeping. Removed all the "Id:" tags. 2009-08-31 20:28:38 -04:00
Gregory Burd
d9572557c7 Overlooked one file, ltmain.sh now up to date. 2009-08-31 19:46:15 -04:00
Gregory Burd
b5b2c94631 Reset permissions and updated a few overlooked autoconf files. 2009-08-31 19:16:02 -04:00
Gregory Burd
1da1168747 Update aclocal to latest version, fix s_* scripts in dist. 2009-08-31 18:52:36 -04:00
Gregory Burd
faa6e61f60 GDBv6 requires a bit more config to deal with dynamic libs and breakpoints. 2008-09-10 12:53:46 -04:00
146 changed files with 26389 additions and 18485 deletions

149
.clang-tidy Normal file
View file

@ -0,0 +1,149 @@
# Generated from CLion Inspection settings
#bugprone-reserved-identifier,
---
Checks: '-*,
-deprecated-non-prototype
bugprone-argument-comment,
bugprone-assert-side-effect,
bugprone-bad-signal-to-kill-thread,
bugprone-branch-clone,
bugprone-copy-constructor-init,
bugprone-dangling-handle,
bugprone-dynamic-static-initializers,
bugprone-fold-init-type,
bugprone-forward-declaration-namespace,
bugprone-forwarding-reference-overload,
bugprone-inaccurate-erase,
bugprone-incorrect-roundings,
bugprone-integer-division,
bugprone-lambda-function-name,
bugprone-macro-parentheses,
bugprone-macro-repeated-side-effects,
bugprone-misplaced-operator-in-strlen-in-alloc,
bugprone-misplaced-pointer-arithmetic-in-alloc,
bugprone-misplaced-widening-cast,
bugprone-move-forwarding-reference,
bugprone-multiple-statement-macro,
bugprone-no-escape,
bugprone-not-null-terminated-result,
bugprone-parent-virtual-call,
bugprone-posix-return,
bugprone-sizeof-container,
bugprone-sizeof-expression,
bugprone-spuriously-wake-up-functions,
bugprone-string-constructor,
bugprone-string-integer-assignment,
bugprone-string-literal-with-embedded-nul,
bugprone-suspicious-enum-usage,
bugprone-suspicious-include,
bugprone-suspicious-memset-usage,
bugprone-suspicious-missing-comma,
bugprone-suspicious-semicolon,
bugprone-suspicious-string-compare,
bugprone-suspicious-memory-comparison,
bugprone-suspicious-realloc-usage,
bugprone-swapped-arguments,
bugprone-terminating-continue,
bugprone-throw-keyword-missing,
bugprone-too-small-loop-variable,
bugprone-undefined-memory-manipulation,
bugprone-undelegated-constructor,
bugprone-unhandled-self-assignment,
bugprone-unused-raii,
bugprone-unused-return-value,
bugprone-use-after-move,
bugprone-virtual-near-miss,
cert-dcl21-cpp,
cert-dcl58-cpp,
cert-err34-c,
cert-err52-cpp,
cert-err60-cpp,
cert-flp30-c,
cert-msc50-cpp,
cert-msc51-cpp,
cert-str34-c,
cppcoreguidelines-interfaces-global-init,
cppcoreguidelines-narrowing-conversions,
cppcoreguidelines-pro-type-member-init,
cppcoreguidelines-pro-type-static-cast-downcast,
cppcoreguidelines-slicing,
google-default-arguments,
google-explicit-constructor,
google-runtime-operator,
hicpp-exception-baseclass,
hicpp-multiway-paths-covered,
misc-misplaced-const,
misc-new-delete-overloads,
misc-no-recursion,
misc-non-copyable-objects,
misc-throw-by-value-catch-by-reference,
misc-unconventional-assign-operator,
misc-uniqueptr-reset-release,
modernize-avoid-bind,
modernize-concat-nested-namespaces,
modernize-deprecated-headers,
modernize-deprecated-ios-base-aliases,
modernize-loop-convert,
modernize-make-shared,
modernize-make-unique,
modernize-pass-by-value,
modernize-raw-string-literal,
modernize-redundant-void-arg,
modernize-replace-auto-ptr,
modernize-replace-disallow-copy-and-assign-macro,
modernize-replace-random-shuffle,
modernize-return-braced-init-list,
modernize-shrink-to-fit,
modernize-unary-static-assert,
modernize-use-auto,
modernize-use-bool-literals,
modernize-use-emplace,
modernize-use-equals-default,
modernize-use-equals-delete,
modernize-use-nodiscard,
modernize-use-noexcept,
modernize-use-nullptr,
modernize-use-override,
modernize-use-transparent-functors,
modernize-use-uncaught-exceptions,
mpi-buffer-deref,
mpi-type-mismatch,
openmp-use-default-none,
performance-faster-string-find,
performance-for-range-copy,
performance-implicit-conversion-in-loop,
performance-inefficient-algorithm,
performance-inefficient-string-concatenation,
performance-inefficient-vector-operation,
performance-move-const-arg,
performance-move-constructor-init,
performance-no-automatic-move,
performance-noexcept-move-constructor,
performance-trivially-destructible,
performance-type-promotion-in-math-fn,
performance-unnecessary-copy-initialization,
performance-unnecessary-value-param,
portability-simd-intrinsics,
readability-avoid-const-params-in-decls,
readability-const-return-type,
readability-container-size-empty,
readability-convert-member-functions-to-static,
readability-delete-null-pointer,
readability-deleted-default,
readability-inconsistent-declaration-parameter-name,
readability-make-member-function-const,
readability-misleading-indentation,
readability-misplaced-array-index,
readability-non-const-parameter,
readability-redundant-control-flow,
readability-redundant-declaration,
readability-redundant-function-ptr-dereference,
readability-redundant-smartptr-get,
readability-redundant-string-cstr,
readability-redundant-string-init,
readability-simplify-subscript-expr,
readability-static-accessed-through-instance,
readability-static-definition-in-anonymous-namespace,
readability-string-compare,
readability-uniqueptr-delete-release,
readability-use-anyofallof'

30
.editorconfig Normal file
View file

@ -0,0 +1,30 @@
# Editor configuration, see http://editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
# Ignore diffs/patches
[*.{diff,patch}]
end_of_line = unset
insert_final_newline = unset
trim_trailing_whitespace = unset
indent_size = unset
[*.c]
ident_style = tab
ident_size = 8
[{Makefile,**.mk}]
# Use tabs for indentation (Makefiles require tabs)
indent_style = tab
ident_size = 4
[*.md]
max_line_length = off
trim_trailing_whitespace = false

6
.envrc Normal file
View file

@ -0,0 +1,6 @@
export DBSQL_VERSION="$(sh -c '. ./dist/RELEASE; echo $DBSQL_VERSION')"
export DBSQL_VERSION_STRING="$(sh -c '. ./dist/RELEASE; echo $DBSQL_VERSION_STRING')"
#dotenv
watch_file devShell.nix shell.nix flake.nix
use flake || use nix

13
.gitignore vendored Normal file
View file

@ -0,0 +1,13 @@
build_unix/**
*~
TAGS
tags
.direnv/
.idea/
dist/autom4te.cache/
dist/config.hin
dist/configure
dist/config.log
src/py/setup.py
test/scr050/Makefile
result-bin

46
README Normal file
View file

@ -0,0 +1,46 @@
DBSQL 0.4.0: (May 8, 2024)
This is version 0.4.0 of DBSQL.
To view the release and installation documentation, load the distribution
file docs/index.html into your web browser.
This work started from the SQLite project (found on the web at
http://www.sqlite.org/). SQLite and all contributions to the SQLite
project have been placed in the public domain by its author, Dr. Richard Hipp.
There was no assertion of copyright at all on the code I used as a starting
point for my work. In fact there are statements that explicitly disclaim
copyright. I am asserting copyright on this work, DBSQL. I believe
that if you examine the extent to which I've changed, updated, and
modified the SQLite code you'll respect my copyright assertion. This
is a new product, heavily inspired by another.
The goal for DBSQL is to provide a small SQL92 relational database layer
on top of the Berkeley DB database. Berkeley DB is copyright Oracle
Corporation (formerly Sleepycat Software, acquired in Feb 2006) and
licensed under the Sleepycat Public License. That license is compatible
with the GPL for open source use. Recognize that you, as someone using
DBSQL, will need to review the Sleepycat License and the GPL before you
use and redistribute your incorporating work. It is your responsibility
to comply with those licenses as I am in my work on DBSQL itself. My
motivation on a personal level is quite simple, I am in product management
these days and not in the code itself. I believe that product managers
should be engineers at heart with an ability to understand business,
politics, and software sales and support. This is my playground to keep
my engineering skills sharp enough to speak fluent geek. As a former
engineer at Sleepycat I understand and value the Berkeley DB programming
infrasture, design, and methodologies and I have liberally copied and
reused them in this project to improve SQLite in ways that I hope will
be of value to open source users out there. I did this because I see the
value of SQLite to its userbase, it is a perfect example of the 80/20
rule and the KISS method and I admire those qualities in software. My
hope is that the Berkeley DB database engine will provide some significant
features that SQLite cannot such as replication for high availability
while remaining small enough to live comfortably inside applications,
services, and devices.
Information and resources pertaining to DBSQL can be found at dbsql.org.
Commercial licenses without the restrictions found in the GPL can be
purchased for this product. See http://dbsql.org/wiki/CommercialUse

78
TODO Normal file
View file

@ -0,0 +1,78 @@
* Rename dbsql_strerror to dbsql_strerr
* Fix logic issue in query processing
tests/smoke2.sql produces incorrect joins
* Check all DB API calls
Make sure a) we check return codes for for all calls into DB and
that b) when there is an error we output it only when configured
to be verbose and c) then return the proper DBSQL error indicating
what went wrong at a higher level.
* Review all reused DB code
Make sure that we're up to date with the latest in DB. Things such
as hashing, etc.
* Find printf/fprintf calls which print error messages
The library should never print messages unless configured to be
verbose.
* tests/
Fix testing infrastructure.
- api.c/__os_sleep()
This is now static in DB's code, so to hack the compile I
commented out the use of __os_sleep() in api.c
- test/scr026
This test has not been updated to check for DBSQL API calls
rather than DB API calls. Review and fix it.
- test/scr030
Update this test to match the configure script. Augment it so
that as the configure script changes the script reports options
not tested.
- A few scr??? < 050
Some of these tests examine source code but do not include the
TCL testing code and so produce false positive FAILures.
- Add test/scr0?? to highlight code notes
FIXME, TODO, and other source source markers
* Code quality and build tools
- valgrind
Fix all memory related bugs.
- splint
Clean up all items pointed out by splint.
- makedepend
Finish integrating this into the dist/Makefile
* Review code for trailing spaces, tab characters, lines > 79 col
* review dbsql/dbsql.c
General clean-up including changing calls to malloc, free, etc to
__os_malloc, __os_free, etc.
* Review SQLite's latest lemon.c and lempar.c code
Consider updating to the newest versions of the parser generator.
* Use LIST/QUEUE macros for linked lists, queues, etc.
Find/replace all custom code implementing these simple data
structures.
* Review memory allocation code in general
* Consider using MPOOL to manage some of DBSQL state across processes
Function pools and other aspects of the DBSQL runtime need not be
re-created in-memory across multiple processes. When doing this
revisit data structures using the LIST/QUEUE macros and shift them
to the SH_ equivalents.
* Random number generator
SQLite implements its own suggesting that rand32_r() (and other
random number generators) are both truely random and bug free.
Some portion of the VDBE requires random numbers to be,
well... random, or as close as possible.
* Review src/vdbe, finish converting to DBSQL-style
* Investigate the TCL Extension Architecture
http://www.tcl.tk/doc/tea/

29
dist/Makefile.in vendored
View file

@ -15,8 +15,6 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: Makefile.in 7 2007-02-03 13:34:17Z gburd $
srcdir= @srcdir@/../src
tstdir= @srcdir@/../test
@ -123,12 +121,12 @@ C_FILES=\
$(srcdir)/lemon/lempar.c $(srcdir)/os/os.c $(srcdir)/clib/random.c \
$(srcdir)/sql_fns.c $(srcdir)/sql_tokenize.c \
$(srcdir)/cg_vacuum.c $(srcdir)/vdbe.c $(srcdir)/vdbe_method.c \
$(srcdir)/common/dbsql_err.c $(srcdir)/clib/snprintf.c \
$(srcdir)/os/os_jtime.c $(srcdir)/clib/memcmp.c \
$(srcdir)/common/dbsql_err.c (srcdir)/clib/snprintf.c \
$(srcdir)/os/os_jtime.c $(srcdir)/os/os_sleep.c $(srcdir)/clib/memcmp.c \
$(srcdir)/clib/strcasecmp.c $(srcdir)/os/dbsql_alloc.c \
$(srcdir)/common/str.c $(srcdir)/common/dbsql_atoi.c \
$(srcdir)/common/dbsql_atof.c $(srcdir)/safety.c \
$(srcdir)/clib/strdup.c
$(srcdir)/common/dbsql_atof.c $(srcdir)/common/dbsql_fop.c \
$(srcdir)/safety.c $(srcdir)/clib/strdup.c
##################################################
# Object and utility lists.
@ -139,9 +137,10 @@ C_OBJS= cg_attach@o@ cg_insert@o@ sql_tokenize@o@ cg_auth@o@ \
cg_pragma@o@ cg_where@o@ cg_trigger@o@ cg_build@o@ \
sql_fns@o@ random@o@ cg_update@o@ cg_delete@o@ hash@o@ \
cg_expr@o@ opcodes@o@ sql_parser@o@ cg_vacuum@o@ \
vdbe@o@ vdbe_method@o@ sm@o@ snprintf@o@ dbsql_err@o@ cg_select@o@ \
os_jtime@o@ memcmp@o@ dbsql_atof@o@ safety@o@ dbsql_atoi@o@ \
strcasecmp@o@ strdup@o@ dbsql_alloc@o@ str@o@
vdbe@o@ vdbe_method@o@ sm@o@ snprintf@o@ dbsql_err@o@ \
dbsql_fop@o@ cg_select@o@ os_sleep@o@ os_jtime@o@ memcmp@o@ \
dbsql_atof@o@ safety@o@ dbsql_atoi@o@ strcasecmp@o@ \
strdup@o@ dbsql_alloc@o@ str@o@
LEMON_OBJS=\
lemon@o@
@ -189,12 +188,12 @@ $(libdbsql): $(DEF_LIB)
$(ln) -s $(libdbsql_version) $@)
# Real static C library.
$(libdbsql_version): dbsql_int.h sql_parser.h opcodes.h $(C_OBJS)
$(libdbsql_version): dbsql_int.h db_int.h sql_parser.h opcodes.h $(C_OBJS)
$(ar) cr $@ $(C_OBJS)
test ! -f $(ranlib) || $(ranlib) $@
# Shared C library.
$(libso_target): dbsql_int.h sql_parser.h opcodes.h $(C_OBJS)
$(libso_target): dbsql_int.h db_int.h sql_parser.h opcodes.h $(C_OBJS)
$(SOLINK) $(SOFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) $(LIBSO_LIBS)
##################################################
@ -324,6 +323,10 @@ distclean maintainer-clean realclean: clean
$(rm) -rf $(REALCLEAN_LIST)
$(rm) -rf libtool
LIBTOOL_DEPS = @LIBTOOL_DEPS@
libtool: $(LIBTOOL_DEPS)
$(SHELL) ./deps/config.status $(builddir)/libtool
check dvi info obj TAGS:
@echo "$@: make target not supported" && true
@ -394,6 +397,8 @@ dbsql_atoi@o@: $(srcdir)/common/dbsql_atoi.c
$(CC) $(CFLAGS) $?
dbsql_err@o@: $(srcdir)/common/dbsql_err.c
$(CC) $(CFLAGS) $?
dbsql_fop@o@: $(srcdir)/common/dbsql_fop.c
$(CC) $(CFLAGS) $?
str@o@: $(srcdir)/common/str.c
$(CC) $(CFLAGS) $?
hash@o@: $(srcdir)/common/hash.c
@ -405,6 +410,8 @@ dbsql_alloc@o@: $(srcdir)/common/dbsql_alloc.c
$(CC) $(CFLAGS) $?
os_jtime@o@: $(srcdir)/os/os_jtime.c
$(CC) $(CFLAGS) $?
os_sleep@o@: $(srcdir)/os/os_sleep.c
$(CC) $(CFLAGS) $?
lemon@o@: $(srcdir)/lemon/lemon.c
$(CC) $(CFLAGS) $?
memcmp@o@: $(srcdir)/clib/memcmp.c

6
dist/RELEASE vendored
View file

@ -15,12 +15,10 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: RELEASE 7 2007-02-03 13:34:17Z gburd $
DBSQL_VERSION_MAJOR=0
DBSQL_VERSION_MINOR=2
DBSQL_VERSION_PATCH=3
DBSQL_VERSION_MINOR=4
DBSQL_VERSION_PATCH=0
DBSQL_VERSION="$DBSQL_VERSION_MAJOR.$DBSQL_VERSION_MINOR.$DBSQL_VERSION_PATCH"
DBSQL_VERSION_UNIQUE_NAME=`printf "_%d%03d" $DBSQL_VERSION_MAJOR $DBSQL_VERSION_MINOR`

17
dist/aclocal/cxx.ac vendored
View file

@ -1,17 +0,0 @@
# C++ checks to determine what style of headers to use and
# whether to use "using" clauses.
AC_DEFUN(AC_CXX_HAVE_STDHEADERS, [
AC_SUBST(cxx_have_stdheaders)
AC_CACHE_CHECK([whether C++ supports the ISO C++ standard includes],
db_cv_cxx_have_stdheaders,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([#include <iostream>
],[std::ostream *o; return 0;],
db_cv_cxx_have_stdheaders=yes, db_cv_cxx_have_stdheaders=no)
AC_LANG_RESTORE
])
if test "$db_cv_cxx_have_stdheaders" = yes; then
cxx_have_stdheaders="#define HAVE_CXX_STDHEADERS 1"
fi])

313
dist/aclocal/cxx.m4 vendored Normal file
View file

@ -0,0 +1,313 @@
# C++ language checks
AC_DEFUN(AC_CXX_STDHEADERS, [
AC_SUBST(cxx_have_stdheaders)
AC_MSG_CHECKING(whether C++ supports the ISO C++ standard includes)
AC_LANG_SAVE
AC_LANG([C++])
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
[[#include <iostream>]],
[[std::ostream *o; return 0;]])],
db_cv_cxx_have_stdheaders=yes, db_cv_cxx_have_stdheaders=no)
AC_LANG_RESTORE
AC_MSG_RESULT($db_cv_cxx_have_stdheaders)
if test "$db_cv_cxx_have_stdheaders" = yes; then
cxx_have_stdheaders="#define HAVE_CXX_STDHEADERS 1"
fi])
AC_DEFUN(AC_CXX_WSTRING, [
AC_MSG_CHECKING(whether C++ supports the wstring class)
AC_SUBST(WSTRING_decl)
AC_LANG_SAVE
AC_LANG([C++])
AC_LINK_IFELSE(AC_LANG_SOURCE(
[[#include <string>]],
[[using std::wstring;
wstring ws; ws.find_first_of(ws);]]),
[WSTRING_decl="#define HAVE_WSTRING 1" ;
AC_MSG_RESULT(yes)],
[WSTRING_decl="#undef HAVE_WSTRING" ;
AC_MSG_RESULT(no)])
AC_LANG_RESTORE
])
AC_DEFUN(AC_CXX_SUPPORTS_TEMPLATES, [
AC_MSG_CHECKING(whether the C++ compiler supports templates for STL)
AC_LANG_SAVE
AC_LANG([C++])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <iostream>
#include <string>
#include <vector>
]], [[
using std::string;
using std::vector;
namespace dbstl_configure_test {
template<typename T1, typename T2 = int>
class MyClass
{
public:
explicit MyClass(int i) { imem = i;}
MyClass(const T1& t1, const T2& t2, int i)
{
mem1 = t1;
mem2 = t2;
imem = i;
}
template <typename T3>
T2 templ_mem_func(T1 t1, T3 t3)
{
mem2 = t1;
T3 t32 = t3;
T2 t2;
return t2;
}
double templ_mem_func(T1 t1, double t3)
{
mem1 = t1;
double t32 = t3;
return t3;
}
template <typename ReturnType, typename T7, typename T8>
ReturnType templ_mem_func(T7, T8);
operator T1() const {return mem1;}
private:
T1 mem1;
T2 mem2;
int imem;
};
template<typename T1, typename T2>
template <typename ReturnType, typename T7, typename T8>
ReturnType MyClass<T1, T2>::templ_mem_func(T7, T8)
{
ReturnType rt;
return rt;
}
template<>
class MyClass<double, float>
{
public:
explicit MyClass(int i) { imem = i;}
MyClass(const double& t1, const float& t2, int i)
{
mem1 = t1;
mem2 = t2;
imem = i;
}
template <typename T3>
float templ_mem_func(double t1, T3 t3)
{
mem2 = t1;
T3 t32 = t3;
float t2;
return t2;
}
double templ_mem_func(double t1, double t3)
{
mem1 = t1;
double t32 = t3;
return t3;
}
template <typename ReturnType, typename T7, typename T8>
ReturnType templ_mem_func(T7, T8);
operator double() const {return mem1;}
private:
double mem1;
float mem2;
int imem;
};
template <typename ReturnType, typename T7, typename T8>
ReturnType MyClass<double, float>::templ_mem_func(T7, T8)
{
ReturnType rt;
return rt;
}
template <typename T1, typename T2>
class MyClass2 {
public:
MyClass2(const T1& t1, const T2&t2){}
};
// partial specialization: both template parameters have same type
template <typename T>
class MyClass2<T,T> {
public:
MyClass2(const T& t1, const T&t2){}
};
// partial specialization: second type is int
template <typename T>
class MyClass2<T,int> {
public:
MyClass2(const T& t1, const int&t2){}
};
// partial specialization: both template parameters are pointer types
template <typename T1, typename T2>
class MyClass2<T1*,T2*> {
public:
MyClass2(const T1* t1, const T2*t2){}
};
template <typename T>
class MyClass2<T*,T*> {
public:
MyClass2(const T* t1, const T*t2){}
};
template <typename T4, typename T5>
int part_spec_func(T4 t4, T5 t5)
{
// Zero Initialization should work.
T4 t44 = T4();
T5 t55 = T5();
t44 = t4;
t55 = t5;
}
template <typename T4>
int part_spec_func(T4 t4, std::vector<T4> t55)
{
T4 t44 = t4;
std::vector<T4> abc = t55;
}
// maximum of two int values
inline int const& max (int const& a, int const& b)
{
return a<b?b:a;
}
// maximum of two values of any type
template <typename T1, typename T2>
inline T2 const max (T1 const& a, T2 const& b)
{
return a<b?b:a;
}
// maximum of two values of any type
template <typename T>
inline T const& max (T const& a, T const& b)
{
return a<b?b:a;
}
// maximum of three values of any type
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
return max (max(a,b), c);
}
template <typename T>
class Base {
public:
void exit2(){}
Base(){}
};
template <typename T>
class Derived : public Base<T> {
public:
// Call Base<T>() explicitly here, otherwise can't access it.
// Kind of like this->.
Derived() : Base<T>(){}
void foo() {
this->exit2();
}
};
} // dbstl_configure_test
using namespace dbstl_configure_test;], [
char cc = 'a';
int i = 4;
double pi = 3.14;
float gold = 0.618;
MyClass2<int,float> mif(i, gold); // uses MyClass2<T1,T2>
MyClass2<float,float> mff(gold, gold); // uses MyClass2<T,T>
MyClass2<float,int> mfi(gold, i); // uses MyClass2<T,int>
MyClass2<int*,float*> mp(&i, &gold); // uses MyClass2<T1*,T2*>
MyClass2<int*,int*> m(&i, &i); // uses MyClass2<T*, T*>
MyClass<char> obj1(i);
obj1.templ_mem_func(cc, pi);
obj1.templ_mem_func(cc, gold);
obj1.templ_mem_func(i, pi);
obj1.templ_mem_func(cc, cc);
char ch = (char)obj1;
string str1("abc"), str2("def");
MyClass<const char*, std::string> obj2(str1.c_str(), str2, i);
obj2.templ_mem_func("klm", str2);
obj2.templ_mem_func("hij", pi);
// Use j to help distinguish, otherwise unable to use the one defined
// outside of class body.
int j = obj2.templ_mem_func<int, char, char>(cc, cc);
// Call explicitly.
obj2.templ_mem_func<int, float, double>(gold, pi);
const char *pch = (const char*)obj2;
MyClass<double, float> obj3(pi, gold, i);
obj3.templ_mem_func(pi, i);
obj3.templ_mem_func(pi, str1);
obj3.templ_mem_func(pi, pi);
obj3.templ_mem_func(cc, pi);
obj3.templ_mem_func(cc, cc);
double tmpd = (double)obj3;
MyClass<double, float> obj4(i);
obj4.templ_mem_func(pi, i);
obj4.templ_mem_func(pi, str1);
obj4.templ_mem_func(pi, pi);
obj4.templ_mem_func(gold, pi);
tmpd = (double)obj4;
// Function template partial specialization.
part_spec_func(pi, gold);
part_spec_func(gold, i);
part_spec_func(str1, str2);
std::vector<std::string> strv;
part_spec_func(str1, strv);
std::vector<double> dblv;
part_spec_func(pi, dblv);
// Function template overloads and explicit call and deduction.
dbstl_configure_test::max(7, 42, 68); // calls the template for three arguments
dbstl_configure_test::max(7.0, 42.0); // calls max<double> (by argument deduction)
dbstl_configure_test::max('a', 'b'); // calls max<char> (by argument deduction)
dbstl_configure_test::max(7, 42.0);
dbstl_configure_test::max<double>(4,4.2); // instantiate T as double
dbstl_configure_test::max(7, 42); // calls the nontemplate for two ints
dbstl_configure_test::max<>(7, 42); // calls max<int> (by argument deduction)
dbstl_configure_test::max<double, double>(7, 42); // calls max<double> (no argument deduction)
dbstl_configure_test::max('a', 42.7); // calls the nontemplate for two ints
Base<double> bobj;
bobj.exit2();
// Using this-> to access base class members.
Derived<double> dobj;
dobj.foo();
dobj.exit2();
]])], AC_MSG_RESULT(yes), AC_MSG_ERROR(no))
AC_LANG_RESTORE
])

View file

@ -17,20 +17,3 @@ if test "$db_cv_gcc_2_96" = "yes"; then
AC_MSG_WARN([INSTALLED GCC COMPILER HAS SERIOUS BUGS; PLEASE UPGRADE.])
AC_MSG_WARN([GCC OPTIMIZATION LEVEL SET TO -O.])
fi])
# Versions of g++ up to 2.8.0 required -fhandle-exceptions, but it is
# renamed as -fexceptions and is the default in versions 2.8.0 and after.
AC_DEFUN(AC_GCC_CONFIG2, [
AC_CACHE_CHECK([whether g++ requires -fhandle-exceptions],
db_cv_gxx_except, [
db_cv_gxx_except=no;
if test "$GXX" = "yes"; then
GXX_VERSION=`${MAKEFILE_CXX} --version`
case ${GXX_VERSION} in
1.*|2.[[01234567]].*|*-1.*|*-2.[[01234567]].*)
db_cv_gxx_except=yes;;
esac
fi])
if test "$db_cv_gxx_except" = "yes"; then
CXXFLAGS="$CXXFLAGS -fhandle-exceptions"
fi])

5867
dist/aclocal/libtool.ac vendored

File diff suppressed because it is too large Load diff

8400
dist/aclocal/libtool.m4 vendored Normal file

File diff suppressed because it is too large Load diff

437
dist/aclocal/ltoptions.m4 vendored Normal file
View file

@ -0,0 +1,437 @@
# Helper functions for option handling. -*- Autoconf -*-
#
# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
# Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 8 ltoptions.m4
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
# ------------------------------------------
m4_define([_LT_MANGLE_OPTION],
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
# ---------------------------------------
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
# matching handler defined, dispatch to it. Other OPTION-NAMEs are
# saved as a flag.
m4_define([_LT_SET_OPTION],
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
_LT_MANGLE_DEFUN([$1], [$2]),
[m4_warning([Unknown $1 option '$2'])])[]dnl
])
# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
# ------------------------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
m4_define([_LT_IF_OPTION],
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
# -------------------------------------------------------
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
# are set.
m4_define([_LT_UNLESS_OPTIONS],
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
[m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
[m4_define([$0_found])])])[]dnl
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
])[]dnl
])
# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
# ----------------------------------------
# OPTION-LIST is a space-separated list of Libtool options associated
# with MACRO-NAME. If any OPTION has a matching handler declared with
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
# the unknown option and exit.
m4_defun([_LT_SET_OPTIONS],
[# Set options
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
[_LT_SET_OPTION([$1], _LT_Option)])
m4_if([$1],[LT_INIT],[
dnl
dnl Simply set some default values (i.e off) if boolean options were not
dnl specified:
_LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
])
_LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
])
dnl
dnl If no reference was made to various pairs of opposing options, then
dnl we run the default mode handler for the pair. For example, if neither
dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
dnl archives by default:
_LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
_LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
[_LT_ENABLE_FAST_INSTALL])
_LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
[_LT_WITH_AIX_SONAME([aix])])
])
])# _LT_SET_OPTIONS
## --------------------------------- ##
## Macros to handle LT_INIT options. ##
## --------------------------------- ##
# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
# -----------------------------------------
m4_define([_LT_MANGLE_DEFUN],
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
# -----------------------------------------------
m4_define([LT_OPTION_DEFINE],
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
])# LT_OPTION_DEFINE
# dlopen
# ------
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
])
AU_DEFUN([AC_LIBTOOL_DLOPEN],
[_LT_SET_OPTION([LT_INIT], [dlopen])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the 'dlopen' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
# win32-dll
# ---------
# Declare package support for building win32 dll's.
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
[enable_win32_dll=yes
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
AC_CHECK_TOOL(AS, as, false)
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
AC_CHECK_TOOL(OBJDUMP, objdump, false)
;;
esac
test -z "$AS" && AS=as
_LT_DECL([], [AS], [1], [Assembler program])dnl
test -z "$DLLTOOL" && DLLTOOL=dlltool
_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
test -z "$OBJDUMP" && OBJDUMP=objdump
_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
])# win32-dll
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
_LT_SET_OPTION([LT_INIT], [win32-dll])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the 'win32-dll' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
# _LT_ENABLE_SHARED([DEFAULT])
# ----------------------------
# implement the --enable-shared flag, and supports the 'shared' and
# 'disable-shared' LT_INIT options.
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
m4_define([_LT_ENABLE_SHARED],
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([shared],
[AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
*)
enable_shared=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
for pkg in $enableval; do
IFS=$lt_save_ifs
if test "X$pkg" = "X$p"; then
enable_shared=yes
fi
done
IFS=$lt_save_ifs
;;
esac],
[enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
_LT_DECL([build_libtool_libs], [enable_shared], [0],
[Whether or not to build shared libraries])
])# _LT_ENABLE_SHARED
LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
# Old names:
AC_DEFUN([AC_ENABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
])
AC_DEFUN([AC_DISABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], [disable-shared])
])
AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
dnl AC_DEFUN([AM_DISABLE_SHARED], [])
# _LT_ENABLE_STATIC([DEFAULT])
# ----------------------------
# implement the --enable-static flag, and support the 'static' and
# 'disable-static' LT_INIT options.
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
m4_define([_LT_ENABLE_STATIC],
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([static],
[AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
*)
enable_static=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
for pkg in $enableval; do
IFS=$lt_save_ifs
if test "X$pkg" = "X$p"; then
enable_static=yes
fi
done
IFS=$lt_save_ifs
;;
esac],
[enable_static=]_LT_ENABLE_STATIC_DEFAULT)
_LT_DECL([build_old_libs], [enable_static], [0],
[Whether or not to build static libraries])
])# _LT_ENABLE_STATIC
LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
# Old names:
AC_DEFUN([AC_ENABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
])
AC_DEFUN([AC_DISABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], [disable-static])
])
AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
dnl AC_DEFUN([AM_DISABLE_STATIC], [])
# _LT_ENABLE_FAST_INSTALL([DEFAULT])
# ----------------------------------
# implement the --enable-fast-install flag, and support the 'fast-install'
# and 'disable-fast-install' LT_INIT options.
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
m4_define([_LT_ENABLE_FAST_INSTALL],
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([fast-install],
[AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
[optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
*)
enable_fast_install=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
for pkg in $enableval; do
IFS=$lt_save_ifs
if test "X$pkg" = "X$p"; then
enable_fast_install=yes
fi
done
IFS=$lt_save_ifs
;;
esac],
[enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
_LT_DECL([fast_install], [enable_fast_install], [0],
[Whether or not to optimize for fast installation])dnl
])# _LT_ENABLE_FAST_INSTALL
LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
# Old names:
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the 'fast-install' option into LT_INIT's first parameter.])
])
AU_DEFUN([AC_DISABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the 'disable-fast-install' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
# _LT_WITH_AIX_SONAME([DEFAULT])
# ----------------------------------
# implement the --with-aix-soname flag, and support the `aix-soname=aix'
# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'.
m4_define([_LT_WITH_AIX_SONAME],
[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
shared_archive_member_spec=
case $host,$enable_shared in
power*-*-aix[[5-9]]*,yes)
AC_MSG_CHECKING([which variant of shared library versioning to provide])
AC_ARG_WITH([aix-soname],
[AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
[shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
[case $withval in
aix|svr4|both)
;;
*)
AC_MSG_ERROR([Unknown argument to --with-aix-soname])
;;
esac
lt_cv_with_aix_soname=$with_aix_soname],
[AC_CACHE_VAL([lt_cv_with_aix_soname],
[lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
with_aix_soname=$lt_cv_with_aix_soname])
AC_MSG_RESULT([$with_aix_soname])
if test aix != "$with_aix_soname"; then
# For the AIX way of multilib, we name the shared archive member
# based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
# and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
# Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
# the AIX toolchain works better with OBJECT_MODE set (default 32).
if test 64 = "${OBJECT_MODE-32}"; then
shared_archive_member_spec=shr_64
else
shared_archive_member_spec=shr
fi
fi
;;
*)
with_aix_soname=aix
;;
esac
_LT_DECL([], [shared_archive_member_spec], [0],
[Shared archive member basename, for filename based shared library versioning on AIX])dnl
])# _LT_WITH_AIX_SONAME
LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
# _LT_WITH_PIC([MODE])
# --------------------
# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
# LT_INIT options.
# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'.
m4_define([_LT_WITH_PIC],
[AC_ARG_WITH([pic],
[AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
[lt_p=${PACKAGE-default}
case $withval in
yes|no) pic_mode=$withval ;;
*)
pic_mode=default
# Look at the argument we got. We use all the common list separators.
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
for lt_pkg in $withval; do
IFS=$lt_save_ifs
if test "X$lt_pkg" = "X$lt_p"; then
pic_mode=yes
fi
done
IFS=$lt_save_ifs
;;
esac],
[pic_mode=m4_default([$1], [default])])
_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
])# _LT_WITH_PIC
LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
# Old name:
AU_DEFUN([AC_LIBTOOL_PICMODE],
[_LT_SET_OPTION([LT_INIT], [pic-only])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the 'pic-only' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
## ----------------- ##
## LTDL_INIT Options ##
## ----------------- ##
m4_define([_LTDL_MODE], [])
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
[m4_define([_LTDL_MODE], [nonrecursive])])
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
[m4_define([_LTDL_MODE], [recursive])])
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
[m4_define([_LTDL_MODE], [subproject])])
m4_define([_LTDL_TYPE], [])
LT_OPTION_DEFINE([LTDL_INIT], [installable],
[m4_define([_LTDL_TYPE], [installable])])
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
[m4_define([_LTDL_TYPE], [convenience])])

123
dist/aclocal/ltsugar.m4 vendored Normal file
View file

@ -0,0 +1,123 @@
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 6 ltsugar.m4
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
# lt_join(SEP, ARG1, [ARG2...])
# -----------------------------
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
# associated separator.
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
# versions in m4sugar had bugs.
m4_define([lt_join],
[m4_if([$#], [1], [],
[$#], [2], [[$2]],
[m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
m4_define([_lt_join],
[m4_if([$#$2], [2], [],
[m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
# lt_car(LIST)
# lt_cdr(LIST)
# ------------
# Manipulate m4 lists.
# These macros are necessary as long as will still need to support
# Autoconf-2.59 which quotes differently.
m4_define([lt_car], [[$1]])
m4_define([lt_cdr],
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
[$#], 1, [],
[m4_dquote(m4_shift($@))])])
m4_define([lt_unquote], $1)
# lt_append(MACRO-NAME, STRING, [SEPARATOR])
# ------------------------------------------
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
# Note that neither SEPARATOR nor STRING are expanded; they are appended
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
# than defined and empty).
#
# This macro is needed until we can rely on Autoconf 2.62, since earlier
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
m4_define([lt_append],
[m4_define([$1],
m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
# ----------------------------------------------------------
# Produce a SEP delimited list of all paired combinations of elements of
# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
# has the form PREFIXmINFIXSUFFIXn.
# Needed until we can rely on m4_combine added in Autoconf 2.62.
m4_define([lt_combine],
[m4_if(m4_eval([$# > 3]), [1],
[m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
[[m4_foreach([_Lt_prefix], [$2],
[m4_foreach([_Lt_suffix],
]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
# -----------------------------------------------------------------------
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
m4_define([lt_if_append_uniq],
[m4_ifdef([$1],
[m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
[lt_append([$1], [$2], [$3])$4],
[$5])],
[lt_append([$1], [$2], [$3])$4])])
# lt_dict_add(DICT, KEY, VALUE)
# -----------------------------
m4_define([lt_dict_add],
[m4_define([$1($2)], [$3])])
# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
# --------------------------------------------
m4_define([lt_dict_add_subkey],
[m4_define([$1($2:$3)], [$4])])
# lt_dict_fetch(DICT, KEY, [SUBKEY])
# ----------------------------------
m4_define([lt_dict_fetch],
[m4_ifval([$3],
m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
# -----------------------------------------------------------------
m4_define([lt_if_dict_fetch],
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
[$5],
[$6])])
# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
# --------------------------------------------------------------
m4_define([lt_dict_filter],
[m4_if([$5], [], [],
[lt_join(m4_quote(m4_default([$4], [[, ]])),
lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
[lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
])

24
dist/aclocal/ltversion.m4 vendored Normal file
View file

@ -0,0 +1,24 @@
# ltversion.m4 -- version numbers -*- Autoconf -*-
#
# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
# Inc.
# Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# @configure_input@
# serial 4245 ltversion.m4
# This file is part of GNU Libtool
m4_define([LT_PACKAGE_VERSION], [2.4.7])
m4_define([LT_PACKAGE_REVISION], [2.4.7])
AC_DEFUN([LTVERSION_VERSION],
[macro_version='2.4.7'
macro_revision='2.4.7'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])

99
dist/aclocal/lt~obsolete.m4 vendored Normal file
View file

@ -0,0 +1,99 @@
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
# Software Foundation, Inc.
# Written by Scott James Remnant, 2004.
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 5 lt~obsolete.m4
# These exist entirely to fool aclocal when bootstrapping libtool.
#
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
# which have later been changed to m4_define as they aren't part of the
# exported API, or moved to Autoconf or Automake where they belong.
#
# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
# using a macro with the same name in our local m4/libtool.m4 it'll
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
# and doesn't know about Autoconf macros at all.)
#
# So we provide this file, which has a silly filename so it's always
# included after everything else. This provides aclocal with the
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
# because those macros already exist, or will be overwritten later.
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
#
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
# Yes, that means every name once taken will need to remain here until
# we give up compatibility with versions before 1.7, at which point
# we need to keep only those names which we still refer to.
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])

View file

@ -5,7 +5,7 @@ AC_DEFUN(AM_OPTIONS_SET, [
AC_MSG_CHECKING(if --enable-utf8-encoding option specified)
AC_ARG_ENABLE(utf8-encoding,
AC_HELP_STRING([--enable-utf8-encoding],
AS_HELP_STRING([--enable-utf8-encoding],
[Encode strings as UTF-8 or ISO-8859.]),, enableval="yes")
db_cv_utf8_strings="$enableval"
case "$enableval" in
@ -27,7 +27,7 @@ AH_TEMPLATE(DBSQL_UTF8_ENCODING,
AC_MSG_CHECKING(if --enable-incore-databases option specified)
AC_ARG_ENABLE(incore-databases,
AC_HELP_STRING([--enable-incore-databases],
AS_HELP_STRING([--enable-incore-databases],
[Enable incore databases for ATTACH and OPEN.]),, enableval="yes")
db_cv_incore_databases="$enableval"
case "$enableval" in
@ -45,7 +45,7 @@ AH_TEMPLATE(INMEMORYDB,
AC_MSG_CHECKING(if --enable-authentication option specified)
AC_ARG_ENABLE(authentication,
AC_HELP_STRING([--enable-authentication],
AS_HELP_STRING([--enable-authentication],
[Include authorization validation code.]),, enableval="yes")
db_cv_auth="$enableval"
case "$enableval" in
@ -61,7 +61,7 @@ AH_TEMPLATE(DBSQL_OMIT_AUTHORIZATION,
AC_MSG_CHECKING(if --enable-vacuum option specified)
AC_ARG_ENABLE(vacuum,
AC_HELP_STRING([--enable-vacuum],
AS_HELP_STRING([--enable-vacuum],
[Include the VACUUM command.]),, enableval="yes")
db_cv_auth="$enableval"
case "$enableval" in
@ -76,7 +76,7 @@ AH_TEMPLATE(DBSQL_OMIT_VACUUM,
AC_MSG_CHECKING(if --enable-datetime option specified)
AC_ARG_ENABLE(enable-datetime,
AC_HELP_STRING([--enable-datetime],
AS_HELP_STRING([--enable-datetime],
[Include datetime functions.]),, enableval="yes")
db_cv_datetime="$enableval"
case "$enableval" in
@ -85,7 +85,7 @@ yes) AC_MSG_RESULT(yes);;
esac
if test "$db_cv_datetime" = "no"; then
AC_DEFINE(DBSQL_OMIT_DATETIME_FUNCS)
fi
AH_TEMPLATE(DBSQL_OMIT_DATETIME_FUNCS,
[Define to 1 to omit support for datetime functions from the build.])
@ -93,7 +93,7 @@ AH_TEMPLATE(DBSQL_OMIT_DATETIME_FUNCS,
AC_MSG_CHECKING([if --with-berkeleydb=DIR option specified])
AC_ARG_WITH(berkeleydb,
[AC_HELP_STRING([--with-berkeleydb=DIR],
[AS_HELP_STRING([--with-berkeleydb=DIR],
[Path of Berkeley DB. [DIR="/usr/local/BerkeleyDB.4.5"]])],
[with_berkeleydb="$withval"], [with_berkeleydb="no"])
AC_MSG_RESULT($with_berkeleydb)
@ -129,7 +129,7 @@ fi
AC_MSG_CHECKING([if --with-db-uniquename=NAME option specified])
AC_ARG_WITH(db-uniquename,
[AC_HELP_STRING([--with-db-uniquename=NAME],
[AS_HELP_STRING([--with-db-uniquename=NAME],
[Unique name used when building DB library.])],
[with_db_uniquename="$withval"], [with_db_uniquename="no"])
if test "$with_db_uniquename" = "no"; then
@ -148,11 +148,11 @@ fi
AC_MSG_CHECKING(if --enable-incore-temp-databases option specified)
AC_ARG_ENABLE(incore-temp-databases,
AC_HELP_STRING([--enable-incore-temp-databases],
AS_HELP_STRING([--enable-incore-temp-databases],
[Enable incore databases for temporary tables.]),, enableval="no")
db_cv_incore_temp_databases="$enableval"
case "$db_cv_incore_temp_databases" in
never)
never)
TEMP_STORE=0
AC_MSG_RESULT([never])
;;
@ -161,12 +161,12 @@ case "$db_cv_incore_temp_databases" in
TEMP_STORE=1
AC_MSG_RESULT([no])
;;
always)
always)
INMEMORYDB=1
TEMP_STORE=3
AC_MSG_RESULT([always])
;;
*)
*)
INMEMORYDB=1
TEMP_STORE=2
AC_MSG_RESULT([yes])
@ -181,7 +181,7 @@ AH_TEMPLATE(TEMP_STORE,
AC_MSG_CHECKING(if --disable-statistics option specified)
AC_ARG_ENABLE(statistics,
AC_HELP_STRING([--disable-statistics],
AS_HELP_STRING([--disable-statistics],
[Do not build statistics support.]),, enableval="yes")
db_cv_build_statistics="$enableval"
case "$enableval" in
@ -191,7 +191,7 @@ esac
AC_MSG_CHECKING(if --enable-sqlite-compat option specified)
AC_ARG_ENABLE(sqlite-compat,
[AC_HELP_STRING([--enable-sqlite-compat],
[AS_HELP_STRING([--enable-sqlite-compat],
[Build SQLite compatibility API.])],
[db_cv_sqlite_compat="$enable_sqlite_compat"],
[db_cv_sqlite_compat="no"])
@ -199,7 +199,7 @@ AC_MSG_RESULT($db_cv_sqlite_compat)
AC_MSG_CHECKING(if --enable-soundex-sqlfn option specified)
AC_ARG_ENABLE(soundex-sqlfn,
[AC_HELP_STRING([--enable-soundex-sqlfn],
[AS_HELP_STRING([--enable-soundex-sqlfn],
[Include soundex() sql function support.])],
[db_cv_sqlite_compat="$enable_soundex_sqlfn"],
[db_cv_sqlite_compat="no"])
@ -207,42 +207,42 @@ AC_MSG_RESULT($db_cv_soundex_sqlfn)
AC_MSG_CHECKING(if --enable-posixmutexes option specified)
AC_ARG_ENABLE(posixmutexes,
[AC_HELP_STRING([--enable-posixmutexes],
[AS_HELP_STRING([--enable-posixmutexes],
[Force use of POSIX standard mutexes.])],
[db_cv_posixmutexes="$enable_posixmutexes"], [db_cv_posixmutexes="no"])
AC_MSG_RESULT($db_cv_posixmutexes)
AC_MSG_CHECKING(if --enable-debug option specified)
AC_ARG_ENABLE(debug,
[AC_HELP_STRING([--enable-debug],
[AS_HELP_STRING([--enable-debug],
[Build a debugging version.])],
[db_cv_debug="$enable_debug"], [db_cv_debug="no"])
AC_MSG_RESULT($db_cv_debug)
AC_MSG_CHECKING(if --enable-diagnostic option specified)
AC_ARG_ENABLE(diagnostic,
[AC_HELP_STRING([--enable-diagnostic],
[AS_HELP_STRING([--enable-diagnostic],
[Build a version with run-time diagnostics.])],
[db_cv_diagnostic="$enable_diagnostic"], [db_cv_diagnostic="no"])
AC_MSG_RESULT($db_cv_diagnostic)
AC_MSG_CHECKING(if --enable-tcl option specified)
AC_ARG_ENABLE(tcl,
[AC_HELP_STRING([--enable-tcl],
[AS_HELP_STRING([--enable-tcl],
[Build Tcl API.])],
[db_cv_tcl="$enable_tcl"], [db_cv_tcl="no"])
AC_MSG_RESULT($db_cv_tcl)
AC_MSG_CHECKING([if --with-tcl=DIR option specified])
AC_ARG_WITH(tcl,
[AC_HELP_STRING([--with-tcl=DIR],
[AS_HELP_STRING([--with-tcl=DIR],
[Directory location of tclConfig.sh.])],
[with_tclconfig="$withval"], [with_tclconfig="no"])
AC_MSG_RESULT($with_tclconfig)
AC_MSG_CHECKING(if --enable-test option specified)
AC_ARG_ENABLE(test,
[AC_HELP_STRING([--enable-test],
[AS_HELP_STRING([--enable-test],
[Configure to run the test suite.])],
[db_cv_test="$enable_test"], [db_cv_test="no"])
AC_MSG_RESULT($db_cv_test)

View file

@ -1,16 +1,15 @@
# $Id: sosuffix.ac 7 2007-02-03 13:34:17Z gburd $
# $Id$
# Determine shared object suffixes.
#
# Our method is to use the libtool variable $library_names_spec,
# set by using AC_PROG_LIBTOOL. This variable is a snippet of shell
# set by using LT_INIT. This variable is a snippet of shell
# defined in terms of $versuffix, $release, $libname and $module
# We want to eval it and grab the suffix used for shared objects.
# By setting $module to yes/no, we obtain the suffixes
# used to create dlloadable, or java loadable modules.
# On many (*nix) systems, these all evaluate to .so, but there
# are some notable exceptions.
# Before calling this macro, $LIBTOOL_PROG must be set to
# the correct method of invoking libtool (e.g. $SHELL ./libtool)
# Before calling this macro, libtool must have been configured.
# This macro is used internally to discover the suffix for the current
# settings of $module. The result is stored in $_SOSUFFIX.
@ -18,14 +17,14 @@ AC_DEFUN(_SOSUFFIX_INTERNAL, [
versuffix=""
release=""
libname=libfoo
eval _SOSUFFIX=\"$shrext\"
if test "X$_SOSUFFIX" = "" ; then
eval _SOSUFFIX=\"$shrext_cmds\"
if test "$_SOSUFFIX" = "" ; then
_SOSUFFIX=".so"
if test `$LIBTOOL_PROG --config | grep build_libtool_libs | grep no` 2>/dev/null; then
if test "X$_SOSUFFIX_MESSAGE" = "X"; then
if test "$enable_shared" != "yes"; then
if test "$_SOSUFFIX_MESSAGE" = ""; then
_SOSUFFIX_MESSAGE=yes
AC_MSG_WARN([libtool may not know about this architecture.])
AC_MSG_WARN([assuming $_SUFFIX suffix for dynamic libraries.])
AC_MSG_WARN([assuming $_SOSUFFIX suffix for dynamic libraries.])
fi
fi
fi

130
dist/aclocal/types.ac vendored
View file

@ -1,130 +0,0 @@
# $Id: types.ac 7 2007-02-03 13:34:17Z gburd $
# Check the sizes we know about, and see if any of them match what's needed.
#
# Prefer ints to anything else, because read, write and others historically
# returned an int.
AC_DEFUN(AM_SEARCH_USIZES, [
case "$3" in
"$ac_cv_sizeof_unsigned_int")
$1="typedef unsigned int $2;";;
"$ac_cv_sizeof_unsigned_char")
$1="typedef unsigned char $2;";;
"$ac_cv_sizeof_unsigned_short")
$1="typedef unsigned short $2;";;
"$ac_cv_sizeof_unsigned_long")
$1="typedef unsigned long $2;";;
*)
AC_MSG_ERROR([No unsigned $3-byte integral type]);;
esac])
AC_DEFUN(AM_SEARCH_SSIZES, [
case "$3" in
"$ac_cv_sizeof_int")
$1="typedef int $2;";;
"$ac_cv_sizeof_char")
$1="typedef char $2;";;
"$ac_cv_sizeof_short")
$1="typedef short $2;";;
"$ac_cv_sizeof_long")
$1="typedef long $2;";;
*)
AC_MSG_ERROR([No signed $3-byte integral type]);;
esac])
# Check for the standard system types.
AC_DEFUN(AM_TYPES, [
# db.h includes <sys/types.h> and <stdio.h>, not the other default includes
# autoconf usually includes. For that reason, we specify a set of includes
# for all type checking tests. [#5060]
#
# IBM's OS/390 and z/OS releases have types in <inttypes.h> not also found
# in <sys/types.h>. Include <inttypes.h> as well, if it exists.
AC_SUBST(inttypes_decl)
db_includes="#include <sys/types.h>"
AC_CHECK_HEADER(inttypes.h, [
inttypes_decl="#include <inttypes.h>"
db_includes="$db_includes
#include <inttypes.h>"])
db_includes="$db_includes
#include <stdio.h>"
# We need to know the sizes of various objects on this system.
# We don't use the SIZEOF_XXX values created by autoconf.
AC_CHECK_SIZEOF(char,, $db_includes)
AC_CHECK_SIZEOF(unsigned char,, $db_includes)
AC_CHECK_SIZEOF(short,, $db_includes)
AC_CHECK_SIZEOF(unsigned short,, $db_includes)
AC_CHECK_SIZEOF(int,, $db_includes)
AC_CHECK_SIZEOF(unsigned int,, $db_includes)
AC_CHECK_SIZEOF(long,, $db_includes)
AC_CHECK_SIZEOF(unsigned long,, $db_includes)
AC_CHECK_SIZEOF(size_t,, $db_includes)
AC_CHECK_SIZEOF(char *,, $db_includes)
AC_CHECK_SIZEOF(long double,, $db_includes)
# We require off_t and size_t, and we don't try to substitute our own
# if we can't find them.
AC_CHECK_TYPE(off_t,, AC_MSG_ERROR([No off_t type.]), $db_includes)
AC_CHECK_TYPE(size_t,, AC_MSG_ERROR([No size_t type.]), $db_includes)
# We look for u_char, u_short, u_int, u_long -- if we can't find them,
# we create our own.
AC_SUBST(u_char_decl)
AC_CHECK_TYPE(u_char,,
[u_char_decl="typedef unsigned char u_char;"], $db_includes)
AC_SUBST(u_short_decl)
AC_CHECK_TYPE(u_short,,
[u_short_decl="typedef unsigned short u_short;"], $db_includes)
AC_SUBST(u_int_decl)
AC_CHECK_TYPE(u_int,,
[u_int_decl="typedef unsigned int u_int;"], $db_includes)
AC_SUBST(u_long_decl)
AC_CHECK_TYPE(u_long,,
[u_long_decl="typedef unsigned long u_long;"], $db_includes)
AC_SUBST(u_int8_decl)
AC_CHECK_TYPE(u_int8_t,,
[AM_SEARCH_USIZES(u_int8_decl, u_int8_t, 1)], $db_includes)
AC_SUBST(u_int16_decl)
AC_CHECK_TYPE(u_int16_t,,
[AM_SEARCH_USIZES(u_int16_decl, u_int16_t, 2)], $db_includes)
AC_SUBST(int16_decl)
AC_CHECK_TYPE(int16_t,,
[AM_SEARCH_SSIZES(int16_decl, int16_t, 2)], $db_includes)
AC_SUBST(u_int32_decl)
AC_CHECK_TYPE(u_int32_t,,
[AM_SEARCH_USIZES(u_int32_decl, u_int32_t, 4)], $db_includes)
AC_SUBST(int32_decl)
AC_CHECK_TYPE(int32_t,,
[AM_SEARCH_SSIZES(int32_decl, int32_t, 4)], $db_includes)
AC_SUBST(long_double_decl)
AC_CHECK_TYPE(long double,
[long_double_decl="typedef long double long_double_t;"],
[long_double_decl="typedef long double long_double_t;"], $db_includes)
# Check for ssize_t -- if none exists, find a signed integral type that's
# the same size as a size_t.
AC_SUBST(ssize_t_decl)
AC_CHECK_TYPE(ssize_t,,
[AM_SEARCH_SSIZES(ssize_t_decl, ssize_t, $ac_cv_sizeof_size_t)],
$db_includes)
# Find the largest integral type.
AC_SUBST(db_align_t_decl)
AC_CHECK_TYPE(unsigned long long,
[db_align_t_decl="typedef unsigned long long db_align_t;"],
[db_align_t_decl="typedef unsigned long db_align_t;"], $db_includes)
# Find an integral type which is the same size as a pointer.
AC_SUBST(db_alignp_t_decl)
AM_SEARCH_USIZES(db_alignp_t_decl, db_alignp_t, $ac_cv_sizeof_char_p)
])

218
dist/aclocal/types.m4 vendored Normal file
View file

@ -0,0 +1,218 @@
# $Id$
# Check the sizes we know about, and see if any of them match what's needed.
#
# Prefer ints to anything else, because read, write and others historically
# returned an int.
AC_DEFUN(AM_SEARCH_USIZES, [
case "$3" in
"$ac_cv_sizeof_unsigned_int")
$1="typedef unsigned int $2;";;
"$ac_cv_sizeof_unsigned_char")
$1="typedef unsigned char $2;";;
"$ac_cv_sizeof_unsigned_short")
$1="typedef unsigned short $2;";;
"$ac_cv_sizeof_unsigned_long")
$1="typedef unsigned long $2;";;
"$ac_cv_sizeof_unsigned_long_long")
$1="typedef unsigned long long $2;";;
*)
if test "$4" != "notfatal"; then
AC_MSG_ERROR([No unsigned $3-byte integral type])
fi;;
esac])
AC_DEFUN(AM_SEARCH_SSIZES, [
case "$3" in
"$ac_cv_sizeof_int")
$1="typedef int $2;";;
"$ac_cv_sizeof_char")
$1="typedef char $2;";;
"$ac_cv_sizeof_short")
$1="typedef short $2;";;
"$ac_cv_sizeof_long")
$1="typedef long $2;";;
"$ac_cv_sizeof_long_long")
$1="typedef long long $2;";;
*)
if test "$4" != "notfatal"; then
AC_MSG_ERROR([No signed $3-byte integral type])
fi;;
esac])
# Check for the standard system types.
AC_DEFUN(AM_TYPES, [
# db.h includes <sys/types.h> and <stdio.h>, not the other default includes
# autoconf usually includes. For that reason, we specify a set of includes
# for all type checking tests. [#5060]
#
# C99 says types should be in <stdint.h>; include <stdint.h> if it exists.
#
# Some systems have types in <stddef.h>; include <stddef.h> if it exists.
#
# IBM's OS/390 and z/OS releases have types in <inttypes.h> not also found
# in <sys/types.h>; include <inttypes.h> if it exists.
db_includes="#include <sys/types.h>"
AC_SUBST(inttypes_h_decl)
AC_CHECK_HEADER(inttypes.h, [
db_includes="$db_includes
#include <inttypes.h>"
inttypes_h_decl="#include <inttypes.h>"])
# IRIX has stdint.h that is only available when using c99 (i.e. __c99
# is defined). Problem with having it in a public header is that a c++
# compiler cannot #include <db.h> if db.h #includes stdint.h, so we
# need to check that stdint.h is available for all cases. Also the
# IRIX compiler does not exit with a non-zero exit code when it sees
# #error, so we actually need to use the header for the compiler to fail.
AC_SUBST(stdint_h_decl)
AC_MSG_CHECKING(for stdint.h)
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <stdint.h>
int main() {
uint_least8_t x=0;
return x;
}]])],[AC_MSG_RESULT(yes)
if test "$db_cv_cxx" = "yes"; then
AC_MSG_CHECKING([if stdint.h can be used by C++])
AC_LANG_PUSH(C++)
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <stdint.h>
int main() {
uint_least8_t x=0;
return x;
}]])],[AC_MSG_RESULT(yes)
stdint_h_decl="#include <stdint.h>"
db_includes="$db_includes
#include <stdint.h>"
],[AC_MSG_RESULT(no)
stdint_h_decl="#ifndef __cplusplus
#include <stdint.h>
#endif"
db_includes="$db_includes
#ifndef __cplusplus
#include <stdint.h>
#endif"
])
AC_LANG_POP
else
stdint_h_decl="#include <stdint.h>"
db_includes="$db_includes
#include <stdint.h>"
fi],[AC_MSG_RESULT(no)])
AC_SUBST(stddef_h_decl)
AC_CHECK_HEADER(stddef.h, [
db_includes="$db_includes
#include <stddef.h>"
stddef_h_decl="#include <stddef.h>"])
AC_SUBST(unistd_h_decl)
AC_CHECK_HEADER(unistd.h, [
db_includes="$db_includes
#include <unistd.h>"
unistd_h_decl="#include <unistd.h>"])
db_includes="$db_includes
#include <stdio.h>"
# We need to know the sizes of various objects on this system.
AC_CHECK_SIZEOF(char,, $db_includes)
AC_CHECK_SIZEOF(unsigned char,, $db_includes)
AC_CHECK_SIZEOF(short,, $db_includes)
AC_CHECK_SIZEOF(unsigned short,, $db_includes)
AC_CHECK_SIZEOF(int,, $db_includes)
AC_CHECK_SIZEOF(unsigned int,, $db_includes)
AC_CHECK_SIZEOF(long,, $db_includes)
AC_CHECK_SIZEOF(unsigned long,, $db_includes)
AC_CHECK_SIZEOF(long long,, $db_includes)
AC_CHECK_SIZEOF(unsigned long long,, $db_includes)
AC_CHECK_SIZEOF(char *,, $db_includes)
AC_CHECK_SIZEOF(long double,, $db_includes)
# We look for u_char, u_short, u_int, u_long -- if we can't find them,
# we create our own.
AC_SUBST(u_char_decl)
AC_CHECK_TYPE(u_char,,
[u_char_decl="typedef unsigned char u_char;"], $db_includes)
AC_SUBST(u_short_decl)
AC_CHECK_TYPE(u_short,,
[u_short_decl="typedef unsigned short u_short;"], $db_includes)
AC_SUBST(u_int_decl)
AC_CHECK_TYPE(u_int,,
[u_int_decl="typedef unsigned int u_int;"], $db_includes)
AC_SUBST(u_long_decl)
AC_CHECK_TYPE(u_long,,
[u_long_decl="typedef unsigned long u_long;"], $db_includes)
# We look for fixed-size variants of u_char, u_short, u_int, u_long as well.
AC_SUBST(u_int8_decl)
AC_CHECK_TYPE(u_int8_t,,
[AM_SEARCH_USIZES(u_int8_decl, u_int8_t, 1)], $db_includes)
AC_SUBST(u_int16_decl)
AC_CHECK_TYPE(u_int16_t,,
[AM_SEARCH_USIZES(u_int16_decl, u_int16_t, 2)], $db_includes)
AC_SUBST(int16_decl)
AC_CHECK_TYPE(int16_t,,
[AM_SEARCH_SSIZES(int16_decl, int16_t, 2)], $db_includes)
AC_SUBST(u_int32_decl)
AC_CHECK_TYPE(u_int32_t,,
[AM_SEARCH_USIZES(u_int32_decl, u_int32_t, 4)], $db_includes)
AC_SUBST(int32_decl)
AC_CHECK_TYPE(int32_t,,
[AM_SEARCH_SSIZES(int32_decl, int32_t, 4)], $db_includes)
AC_SUBST(u_int64_decl)
AC_CHECK_TYPE(u_int64_t,,
[AM_SEARCH_USIZES(u_int64_decl, u_int64_t, 8, notfatal)], $db_includes)
AC_SUBST(int64_decl)
AC_CHECK_TYPE(int64_t,,
[AM_SEARCH_SSIZES(int64_decl, int64_t, 8, notfatal)], $db_includes)
AC_SUBST(long_double_decl)
AC_CHECK_TYPE(long double,
[long_double_decl="typedef long double long_double_t;"],
[long_double_decl="typedef long double long_double_t;"], $db_includes)
# No currently autoconf'd systems lack FILE, off_t pid_t, size_t, time_t.
#
# We require them, we don't try to substitute our own if we can't find them.
AC_SUBST(FILE_t_decl)
AC_CHECK_TYPE(FILE *,, AC_MSG_ERROR([No FILE type.]), $db_includes)
AC_SUBST(off_t_decl)
AC_CHECK_TYPE(off_t,, AC_MSG_ERROR([No off_t type.]), $db_includes)
AC_SUBST(pid_t_decl)
AC_CHECK_TYPE(pid_t,, AC_MSG_ERROR([No pid_t type.]), $db_includes)
AC_SUBST(size_t_decl)
AC_CHECK_TYPE(size_t,, AC_MSG_ERROR([No size_t type.]), $db_includes)
AC_SUBST(time_t_decl)
AC_CHECK_TYPE(time_t,, AC_MSG_ERROR([No time_t type.]), $db_includes)
# Check for ssize_t -- if none exists, find a signed integral type that's
# the same size as a size_t.
AC_CHECK_SIZEOF(size_t,, $db_includes)
AC_SUBST(ssize_t_decl)
AC_CHECK_TYPE(ssize_t,,
[AM_SEARCH_SSIZES(ssize_t_decl, ssize_t, $ac_cv_sizeof_size_t)],
$db_includes)
# Check for uintmax_t -- if none exists, find the largest unsigned integral
# type available.
AC_SUBST(uintmax_t_decl)
AC_CHECK_TYPE(uintmax_t,, [AC_CHECK_TYPE(unsigned long long,
[uintmax_t_decl="typedef unsigned long long uintmax_t;"],
[uintmax_t_decl="typedef unsigned long uintmax_t;"], $db_includes)])
# Check for uintptr_t -- if none exists, find an integral type which is
# the same size as a pointer.
AC_SUBST(uintptr_t_decl)
AC_CHECK_TYPE(uintptr_t,,
[AM_SEARCH_USIZES(uintptr_t_decl, uintptr_t, $ac_cv_sizeof_char_p)])
])

4
dist/buildrel vendored
View file

@ -15,8 +15,6 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: buildrel 7 2007-02-03 13:34:17Z gburd $
#
# Build the distribution package.
@ -30,7 +28,7 @@ setenv D `pwd`
cd $D/dist
cvs -q update RELEASE
vi RELEASE
setenv VERSION `sh -c '. RELEASE; echo $DB_VERSION'`
setenv VERSION `sh -c '. RELEASE; echo $DBSQL_VERSION'`
echo "Version: $VERSION"
# Make sure the source tree is up-to-date

2025
dist/config.guess vendored Normal file → Executable file

File diff suppressed because it is too large Load diff

2663
dist/config.sub vendored Normal file → Executable file

File diff suppressed because it is too large Load diff

44
dist/configure.ac vendored
View file

@ -1,6 +1,6 @@
# DBSQL - A SQL database engine.
#
# Copyright (C) 2007-2008 The DBSQL Group, Inc. - All rights reserved.
# Copyright (C) 2007-2009 The DBSQL Group, Inc. - All rights reserved.
#
# This library is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -15,16 +15,12 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: configure.ac 7 2007-02-03 13:34:17Z gburd $
# Process this file with autoconf to produce a configure script.
PACKAGE=dbsql
AC_INIT(DBSQL,
__EDIT_DBSQL_VERSION__,
support@dbsql.org,
dbsql-__EDIT_DBSQL_VERSION__)
AC_INIT([DBSQL],[__EDIT_DBSQL_VERSION__],[support@dbsql.org],[dbsql-__EDIT_DBSQL_VERSION__])
AC_LANG(C)
AC_CONFIG_SRCDIR([../src/clib/memcmp.c])
AC_CONFIG_HEADERS([dbsql_config.h:config.hin])
@ -246,21 +242,21 @@ AC_PROG_CC(cc gcc)
AC_SUBST(DB_PROTO1)
AC_SUBST(DB_PROTO2)
# Clear __P, some other systems use it too.
DB_PROTO1="#undef __P"
# AC_PROG_CC_STDC only sets ac_cv_prog_cc_stdc if the test fails, so
# check for "no", not "yes".
if test "$ac_cv_prog_cc_stdc" = "no"; then
DB_PROTO2="#define __P(protos) ()"
if test "$ac_cv_prog_cc_c89" = "no"; then
DB_PROTO2="#define __P(protos) ()"
else
DB_PROTO2="#define __P(protos) protos"
DB_PROTO2="#define __P(protos) protos"
fi
# Check for "const" and "inline" keywords.
AC_C_CONST
AC_SUBST(DB_CONST)
if test "$ac_cv_c_const" != "yes"; then
DB_CONST="#define const"
fi
AC_C_INLINE
# Because of shared library building, the ${CC} used for config tests
# may be different than the ${CC} we want to put in the Makefile.
@ -293,14 +289,13 @@ if test "$db_cv_cxx" = "yes"; then
###### WORKAROUND: SEE SR #7938
AC_PROG_CXXCPP
###############################
AC_CXX_HAVE_STDHEADERS
AC_CXX_STDHEADERS
MAKEFILE_CXX="${CXX}"
MAKEFILE_CXXLINK="${CXX}"
fi
# Do some gcc specific configuration.
AC_GCC_CONFIG1
AC_GCC_CONFIG2
# We need the -Kthread/-pthread flag when compiling on SCO/Caldera's UnixWare
# and OpenUNIX releases. We can't make the test until we know which compiler
@ -321,7 +316,8 @@ export CC CCC
CCC=CXX
# Libtool configuration.
AC_PROG_LIBTOOL
LT_INIT
AC_SUBST([LIBTOOL_DEPS])
SOFLAGS="-rpath \$(libdir)"
LIBTOOL_PROG="${SHELL} ./libtool"
@ -433,15 +429,19 @@ fi
# Checks for include files, structures, C types.
AC_HEADER_STAT
AC_HEADER_TIME
AC_CHECK_HEADERS_ONCE([sys/time.h])
# End of obsolete code.
AC_HEADER_DIRENT
AC_CHECK_HEADERS(sys/select.h sys/time.h sys/fcntl.h)
AC_CHECK_MEMBERS([struct stat.st_blksize])
AM_TYPES
AC_CACHE_CHECK([for ANSI C exit success/failure values], db_cv_exit_defines, [
AC_TRY_COMPILE([#include <stdlib.h>], return (EXIT_SUCCESS);,
[db_cv_exit_defines=yes], [db_cv_exit_defines=no])])
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
[[#include <stdlib.h>]],
[[return (EXIT_SUCCESS);]])],
[db_cv_exit_defines=yes],[db_cv_exit_defines=no])])
if test "$db_cv_exit_defines" = "yes"; then
AC_DEFINE(HAVE_EXIT_SUCCESS)
AH_TEMPLATE(HAVE_EXIT_SUCCESS,
@ -461,10 +461,12 @@ AC_CHECK_FUNC(sched_yield,,
# library. Also we can't depend on any specific call existing (pthread_create,
# for example), as it may be #defined in an include file -- OSF/1 (Tru64) has
# this problem.
AC_HAVE_LIBRARY(pthread, LOAD_LIBS="$LOAD_LIBS -lpthread")
AC_CHECK_LIB([pthread],[main],[LOAD_LIBS="$LOAD_LIBS -lpthread"],[],[])ac_cv_lib_pthread=ac_cv_lib_pthread_main
# We use sqrt() so we need the math library -lm
AC_HAVE_LIBRARY(m, LIBS="$LIBS -lm")
AC_CHECK_LIB([m],[main],[LIBS="$LIBS -lm"],[],[])ac_cv_lib_m=ac_cv_lib_m_main
# Checks for system functions for which we have replacements.
AC_REPLACE_FUNCS(getopt memcmp memcpy memmove strdup strndup strerror)

15
dist/gen_inc.awk vendored
View file

@ -34,6 +34,7 @@
# e_pfile include file that contains EXTERN prototypes
# i_dfile list of internal (PUBLIC) #defines
# i_pfile include file that contains internal (PUBLIC) prototypes
# i_sfile include file that contains internal (STATIC) prototypes
/PUBLIC:/ {
sub("^.*PUBLIC:[ ][ ]*", "")
if ($0 ~ "^#if|^#ifdef|^#ifndef|^#else|^#endif") {
@ -49,6 +50,20 @@
}
}
/STATIC:/ {
sub("^.*STATIC:[ ][ ]*", "")
if ($0 ~ "^#if|^#ifdef|^#ifndef|^#else|^#endif") {
print $0 >> i_sfile
next
}
sline = sprintf("%s %s", sline, $0)
if (sline ~ "\\)\\);") {
sub("^[ ]*", "", sline)
print sline >> i_sfile
sline = ""
}
}
/EXTERN:/ {
sub("^.*EXTERN:[ ][ ]*", "")
if ($0 ~ "^#if|^#ifdef|^#ifndef|^#else|^#endif") {

734
dist/install-sh vendored Normal file → Executable file
View file

@ -1,251 +1,541 @@
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5 (mit/util/scripts/install.sh).
scriptversion=2020-11-14.01; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright 1991 by the Massachusetts Institute of Technology
# Copyright (C) 1994 X Consortium
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of M.I.T. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission. M.I.T. makes no representations about the
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# 'make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# from scratch.
tab=' '
nl='
'
IFS=" $tab$nl"
# set DOITPROG to echo to test this script
# Set DOITPROG to "echo" to test this script.
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
doit=${DOITPROG-}
doit_exec=${doit:-exec}
# Put in absolute file names if you don't have them in your path;
# or use environment vars.
# put in absolute paths if you don't have them in your path; or use env. vars.
chgrpprog=${CHGRPPROG-chgrp}
chmodprog=${CHMODPROG-chmod}
chownprog=${CHOWNPROG-chown}
cmpprog=${CMPPROG-cmp}
cpprog=${CPPROG-cp}
mkdirprog=${MKDIRPROG-mkdir}
mvprog=${MVPROG-mv}
rmprog=${RMPROG-rm}
stripprog=${STRIPPROG-strip}
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
posix_mkdir=
transformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
# Desired mode of installed file.
mode=0755
# Create dirs (including intermediate dirs) using mode 755.
# This is like GNU 'install' as of coreutils 8.32 (2020).
mkdir_umask=22
backupsuffix=
chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
mvcmd=$mvprog
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
stripcmd=
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
src=
dst=
dir_arg=
dst_arg=
-d) dir_arg=true
shift
continue;;
copy_on_change=false
is_target_a_directory=possibly
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
Options:
--help display this help and exit.
--version display version info and exit.
-s) stripcmd="$stripprog"
shift
continue;;
-c (ignored)
-C install only if different (preserve data modification time)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-p pass -p to $cpprog.
-s $stripprog installed files.
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
By default, rm is invoked with -f; when overridden with RMPROG,
it's up to you to specify -f if you want it.
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
If -S is not specified, no backups are attempted.
Email bug reports to bug-automake@gnu.org.
Automake home page: https://www.gnu.org/software/automake/
"
while test $# -ne 0; do
case $1 in
-c) ;;
-C) copy_on_change=true;;
-d) dir_arg=true;;
-g) chgrpcmd="$chgrpprog $2"
shift;;
--help) echo "$usage"; exit $?;;
-m) mode=$2
case $mode in
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
echo "$0: invalid mode: $mode" >&2
exit 1;;
esac
shift;;
-o) chowncmd="$chownprog $2"
shift;;
-p) cpprog="$cpprog -p";;
-s) stripcmd=$stripprog;;
-S) backupsuffix="$2"
shift;;
-t)
is_target_a_directory=always
dst_arg=$2
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
shift;;
-T) is_target_a_directory=never;;
--version) echo "$0 $scriptversion"; exit $?;;
--) shift
break;;
-*) echo "$0: invalid option: $1" >&2
exit 1;;
*) break;;
esac
shift
done
# We allow the use of options -d and -T together, by making -d
# take the precedence; this is for compatibility with GNU install.
if test -n "$dir_arg"; then
if test -n "$dst_arg"; then
echo "$0: target directory not allowed when installing a directory." >&2
exit 1
fi
fi
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dst_arg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dst_arg"
shift # fnord
fi
shift # arg
dst_arg=$arg
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
done
fi
if test $# -eq 0; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call 'install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
if test -z "$dir_arg"; then
if test $# -gt 1 || test "$is_target_a_directory" = always; then
if test ! -d "$dst_arg"; then
echo "$0: $dst_arg: Is not a directory." >&2
exit 1
fi
fi
fi
if test -z "$dir_arg"; then
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
trap "ret=141; $do_exit" 13
trap "ret=143; $do_exit" 15
# Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps.
case $mode in
# Optimize common cases.
*644) cp_umask=133;;
*755) cp_umask=22;;
*[0-7])
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw='% 200'
fi
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
*)
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw=,u+rw
fi
cp_umask=$mode$u_plus_rw;;
esac
fi
for src
do
# Protect names problematic for 'test' and other utilities.
case $src in
-* | [=\(\)!]) src=./$src;;
esac
if test -n "$dir_arg"; then
dst=$src
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
# Don't chown directories that already exist.
if test $dstdir_status = 0; then
chowncmd=""
fi
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dst_arg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dst_arg
# If destination is a directory, append the input filename.
if test -d "$dst"; then
if test "$is_target_a_directory" = never; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
dstdir=$dst
dstbase=`basename "$src"`
case $dst in
*/) dst=$dst$dstbase;;
*) dst=$dst/$dstbase;;
esac
dstdir_status=0
else
dstdir=`dirname "$dst"`
test -d "$dstdir"
dstdir_status=$?
fi
fi
case $dstdir in
*/) dstdirslash=$dstdir;;
*) dstdirslash=$dstdir/;;
esac
obsolete_mkdir_used=false
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
# With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then
mkdir_mode=-m$mode
else
mkdir_mode=
fi
posix_mkdir=false
# The $RANDOM variable is not portable (e.g., dash). Use it
# here however when possible just to lower collision chance.
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
trap '
ret=$?
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
exit $ret
' 0
# Because "mkdir -p" follows existing symlinks and we likely work
# directly in world-writeable /tmp, make sure that the '$tmpdir'
# directory is successfully created first before we actually test
# 'mkdir -p'.
if (umask $mkdir_umask &&
$mkdirprog $mkdir_mode "$tmpdir" &&
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
test_tmpdir="$tmpdir/a"
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac
if
$posix_mkdir && (
umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
)
then :
else
# mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go.
case $dstdir in
/*) prefix='/';;
[-=\(\)!]*) prefix='./';;
*) prefix='';;
esac
oIFS=$IFS
IFS=/
set -f
set fnord $dstdir
shift
set +f
IFS=$oIFS
prefixes=
for d
do
test X"$d" = X && continue
prefix=$prefix$d
if test -d "$prefix"; then
prefixes=
else
if $posix_mkdir; then
(umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1
else
case $prefix in
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
*) qprefix=$prefix;;
esac
prefixes="$prefixes '$qprefix'"
fi
fi
prefix=$prefix/
done
if test -n "$prefixes"; then
# Don't fail if two instances are running concurrently.
(umask $mkdir_umask &&
eval "\$doit_exec \$mkdirprog $prefixes") ||
test -d "$dstdir" || exit 1
obsolete_mkdir_used=true
fi
fi
fi
if test -n "$dir_arg"; then
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
else
# Make a couple of temp file names in the proper directory.
dsttmp=${dstdirslash}_inst.$$_
rmtmp=${dstdirslash}_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name.
(umask $cp_umask &&
{ test -z "$stripcmd" || {
# Create $dsttmp read-write so that cp doesn't create it read-only,
# which would cause strip to fail.
if test -z "$doit"; then
: >"$dsttmp" # No need to fork-exec 'touch'.
else
$doit touch "$dsttmp"
fi
}
} &&
$doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
# If -C, don't bother to copy if it wouldn't change the file.
if $copy_on_change &&
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
set -f &&
set X $old && old=:$2:$4:$5:$6 &&
set X $new && new=:$2:$4:$5:$6 &&
set +f &&
test "$old" = "$new" &&
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
then
rm -f "$dsttmp"
else
# If $backupsuffix is set, and the file being installed
# already exists, attempt a backup. Don't worry if it fails,
# e.g., if mv doesn't support -f.
if test -n "$backupsuffix" && test -f "$dst"; then
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
fi
# Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
{
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
test ! -f "$dst" ||
$doit $rmcmd "$dst" 2>/dev/null ||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
} ||
{ echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
}
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dst"
}
fi || exit 1
trap '' 0
fi
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
chmodcmd=""
else
instcmd=$mkdirprog
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# and set any options; do chmod last to preserve setuid bits
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0
# Local variables:
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:

12994
dist/ltmain.sh vendored

File diff suppressed because it is too large Load diff

0
dist/pubdef.in vendored Normal file
View file

2
dist/s_all vendored Normal file → Executable file
View file

@ -16,8 +16,6 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: s_all 7 2007-02-03 13:34:17Z gburd $
sh s_perm # permissions.
sh s_symlink # symbolic links.

6
dist/s_config vendored Normal file → Executable file
View file

@ -17,8 +17,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: s_config 7 2007-02-03 13:34:17Z gburd $
#
# Build the autoconfiguration files.
trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3 13 15
@ -26,11 +24,11 @@ trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3 13 15
. ./RELEASE
echo "autoconf: building aclocal.m4..."
cat aclocal/*.ac > aclocal.m4
cat aclocal/*.m4 > aclocal.m4
echo "autoconf: running autoheader to build config.hin..."
rm -f config.hin
autoheader
autoheader --warnings=all
chmod 444 config.hin
echo "autoconf: running autoconf to build configure"

44
dist/s_include vendored Normal file → Executable file
View file

@ -17,8 +17,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: s_include 7 2007-02-03 13:34:17Z gburd $
#
# Build the automatically generated function prototype files.
msgc="/* DO NOT EDIT: automatically built by dist/s_include. */"
@ -79,7 +77,8 @@ e_dfile=/tmp/__db_c.$$
e_pfile=/tmp/__db_a.$$
i_dfile=/tmp/__db_d.$$
i_pfile=/tmp/__db_b.$$
trap 'rm -f $e_dfile $e_pfile $i_dfile $i_pfile; exit 0' 0 1 2 3 13 15
i_sfile=/tmp/__db_e.$$
trap 'rm -f $e_dfile $e_pfile $i_dfile $i_pfile $i_sfile; exit 0' 0 1 2 3 13 15
head defonly space _DBSQL_EXT_DEF_IN_ > $e_dfile
head space _DBSQL_EXT_PROT_IN_ > $e_pfile
@ -87,21 +86,26 @@ head defonly _DBSQL_INT_DEF_IN_ > $i_dfile
# Process the standard directories, creating per-directory prototype
# files and adding to the external prototype and #define files.
for i in dbsql os clib common ; do
head "_${i}_ext_h_" > $i_pfile
f="../src/$i/*.c"
[ "$f" = "../src/dbsql/*.c" ] && f="../src/*.c"
awk -f gen_inc.awk \
-v e_dfile=$e_dfile \
-v e_pfile=$e_pfile \
-v i_dfile=$i_dfile \
-v i_pfile=$i_pfile $f
tail "_${i}_ext_h_" >> $i_pfile
f="../src/inc/${i}_ext.h"
cmp $i_pfile $f > /dev/null 2>&1 ||
(echo "Building $f" && rm -f $f && cp $i_pfile $f && chmod 444 $f)
for pkg in dbsql os clib common ; do
head "_${pkg}_ext_h_" > $i_pfile
cfiles="../src/${pkg}/*.c"
[ "$cfiles" = "../src/dbsql/*.c" ] && cfiles="../src/*.c"
for file in $(ls $cfiles); do
fname="$(echo $file | sed -n 's/^\(.*\/\)*\([^.]*\)\(.*\)/\2/p')"
head "_${fname}_decl_h_" > $i_sfile
awk -f gen_inc.awk \
-v e_dfile=$e_dfile \
-v e_pfile=$e_pfile \
-v i_dfile=$i_dfile \
-v i_pfile=$i_pfile \
-v i_sfile=$i_sfile $file
tail "_${fname}_decl_h_" >> $i_sfile
decl="../src/inc/${fname}_decl.h"
# cmp $i_sfile $decl > /dev/null 2>&1 ||
# (echo "Building $decl" && rm -f $decl && cp $i_sfile $decl && chmod 444 $decl)
done
tail "_${pkg}_ext_h_" >> $i_pfile
ext="../src/inc/${pkg}_ext.h"
cmp $i_pfile $ext > /dev/null 2>&1 ||
(echo "Building $ext" && rm -f $ext && cp $i_pfile $ext && chmod 444 $ext)
done

2
dist/s_perm vendored Normal file → Executable file
View file

@ -16,8 +16,6 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: s_perm 7 2007-02-03 13:34:17Z gburd $
d=..
echo 'Updating DBSQL source tree permissions...'

2
dist/s_readme vendored Normal file → Executable file
View file

@ -17,8 +17,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: s_readme 7 2007-02-03 13:34:17Z gburd $
#
# Build the README.
echo 'Updating DBSQL README file...'

2
dist/s_symlink vendored Normal file → Executable file
View file

@ -16,8 +16,6 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: s_symlink 7 2007-02-03 13:34:17Z gburd $
echo 'Creating DBSQL source tree symbolic links...'

2
dist/s_tags vendored Normal file → Executable file
View file

@ -17,8 +17,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: s_tags 7 2007-02-03 13:34:17Z gburd $
#
# Build tags files.
files=`echo ../src/*.[ch] \

2
dist/s_test vendored Normal file → Executable file
View file

@ -17,8 +17,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: s_test 7 2007-02-03 13:34:17Z gburd $
#
# Build the Tcl test files.
msg1="# Automatically built by dist/s_test; may require local editing."

41
dist/sqlconf vendored Normal file → Executable file
View file

@ -18,7 +18,7 @@ args=""
#args="--disable-shared $args"
#args="--disable-static $args"
args="--enable-vacuum $args"
args="--enable-datetime $args"
#args="--enable-datetime $args"
args="--enable-authentication $args"
args="--enable-incore-databases $args"
args="--enable-incore-temp-databases $args"
@ -28,11 +28,20 @@ args="--enable-test $args"
args="--enable-tcl $args"
#args="--enable-sqlite-compat $args"
args="--enable-soundex-sqlfn $args"
args="--enable-posix-mutexes $args"
args="--with-tcl=/usr/lib/tcl8.4 $args"
args="--with-berkeleydb=/usr/local/db $args"
#args="--with-tcl=/usr/lib/tcl-8.5.19/lib $args"
#args="--with-berkeleydb=/usr/local/db-4.8.30 $args"
#args="--with-db-uniquename=FOO $args"
#args="LD_TWOLEVEL_NAMESPACE=1 LIBTSO_LIBS=-ltcl8.4 $args" # Mac OS/X
# Mac OS/X enable:
#args="LD_TWOLEVEL_NAMESPACE=1 LIBTSO_LIBS=-ltcl8.4 $args"
# On NixOS enable:
CFLAGS="${NIX_CFLAGS_COMPILE} -O0 -g -DDEBUG"
LDLAGS="${NIX_LDFLAGS} /home/gburd/src/libdb/build_unix/.libs"
#args="--with-berkeleydb=$(pkg-config --variable=prefix db) $args"
#args="--with-berkeleydb=/nix/store/mlhib3c2ra8bj36vhxmwqhyxph8a8sgf-db-4.8.30 $args"
args="--with-berkeleydb=/home/gburd/opt $args"
args="--with-tcl=$(pkg-config --variable=libdir tcl) $args"
echo "env $cppflags $ldflags $libs ../dist/configure $args"
env $cppflags $ldflags $libs sh ../dist/configure -C $args
@ -46,16 +55,20 @@ env $cppflags $ldflags $libs sh ../dist/configure -C $args
# echo 'print __db_dump(dbc->dbp, "a", "/tmp/o")' &&
# echo "end") > .gdbinit
(echo "set environment LD_LIBRARY_PATH=.:.libs" &&
echo "dir ../src" &&
echo "dir ../src/dbsql" &&
echo "dir /usr/local/db/src" &&
echo "path /usr/local/db/lib" &&
echo "path .") > .gdbinit
# (echo "set environment LD_LIBRARY_PATH=.:.libs" &&
# echo "dir ../src" &&
# echo "dir ../src/dbsql" &&
# echo "dir ../src/dbsql/rl/src" &&
# echo "dir /usr/local/db/src/dist" &&
# echo "path /usr/local/db/lib" &&
# echo "path .") > .gdbinit
rm -f tags
ln -s ../dist/tags tags
mkdir .libs && /bin/true
ln -s .gdbinit .libs/.gdbinit
ln -s ./.libs/dbsql dbsql-bin && /bin/true
mkdir -p .libs && true
exit 0
nix-build -E 'with import <nixpkgs> {}; enableDebugging db4'
gdb -ix .gdbinit --tui build_unix/.libs/dbsql
r --init ../test/smoke.sql smoke

3
dist/srcfiles.in vendored
View file

@ -15,8 +15,6 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# $Id: srcfiles.in 7 2007-02-03 13:34:17Z gburd $
# This is an input file for the s_win32_dsp. It lists the source files in
@ -76,6 +74,7 @@ src/dbsql_tclsh.c app=dbsql_tclsh
src/lemon/lemon.c app=lemon
src/lemon/lempar.c app=lemon
src/os/os_jtime.c dynamic static
src/os/os_sleep.c dynamic static
src/safety.c dynamic static
src/sm.c dynamic static
src/sql_fns.c dynamic static

0
docs_src/m4/m4.links Normal file
View file

206
flake.lock Normal file
View file

@ -0,0 +1,206 @@
{
"nodes": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1694529238,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1685518550,
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1660459072,
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1693660503,
"narHash": "sha256-B/g2V4v6gjirFmy+I5mwB2bCYc0l3j5scVfwgl6WOl8=",
"owner": "nix-community",
"repo": "nix-github-actions",
"rev": "bd5bdbb52350e145c526108f4ef192eb8e554fa0",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1697722682,
"narHash": "sha256-PRhNRNxBEsf4hdpuGIGcRckyYGm5iGuI9P0UGzOmzEo=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8e8f3e83b66a6a9a9e953e4a14b1a227b22a18d4",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1685801374,
"narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c37ca420157f4abc31e26f436c1145f8951ff373",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1689261696,
"narHash": "sha256-LzfUtFs9MQRvIoQ3MfgSuipBVMXslMPH/vZ+nM40LkA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "df1eee2aa65052a18121ed4971081576b25d6b5c",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils_2",
"gitignore": "gitignore",
"nixpkgs": "nixpkgs_2",
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1696846637,
"narHash": "sha256-0hv4kbXxci2+pxhuXlVgftj/Jq79VSmtAyvfabCCtYk=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "42e1b6095ef80a51f79595d9951eb38e91c4e6ca",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nix-github-actions": "nix-github-actions",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": "pre-commit-hooks"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

104
flake.nix Normal file
View file

@ -0,0 +1,104 @@
{
description = "The DBSQL library, a mixup of SQLite and Berkeley DB";
nixConfig = {
bash-prompt = "\\[\\e[34;1m\\]nix ~ \\[\\e[0m\\]";
};
inputs = {
nixpkgs.url = "github:nixos/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
};
inputs.pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
inputs.nix-github-actions.url = "github:nix-community/nix-github-actions";
inputs.nix-github-actions.inputs.nixpkgs.follows = "nixpkgs";
outputs = { self, nixpkgs, flake-utils, pre-commit-hooks, nix-github-actions }:
let
inherit (nixpkgs) lib;
officialRelease = false;
#version = "DBSQL ${DBSQL_VERSION}: (${versionSuffix})";
version = "DBSQL 0.3.1: (${versionSuffix})";
versionSuffix =
if officialRelease
then ""
else "pre${builtins.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")}_${self.shortRev or "dirty"}";
supportedSystems = [ "x86_64-linux" ];
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
nixpkgsFor = forAllSystems (system: import nixpkgs {
inherit system;
overlays = [ self.overlay ];
});
in
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [
(final: prev: {
dbsql = with final; stdenv.mkDerivation rec {
inherit version;
inherit system;
pname = "dbsql";
src = self;
configureFlags = [
"--host ${system}"
];
buildInputs = [
(enableDebuging db4)
glibc.out
glibc.static
tcl-8_5
];
nativeBuildInputs = [ autoreconfHook ];
meta = {
changelog = "https://git.burd.me/greg/dbsql/raw/branch/main/ChangeLog";
downloadPage = "https://git.burd.me/greg/dbsql/releases";
homepage = "https://github.com/gburd/dbsql";
license = "https://github.com/gburd/dbsql/LICENSE";
mainProgram = "dbsql";
maintainers = [ "Greg Burd <greg@burd.me>" ];
platforms = supportedSystems;
};
};
})
];
checks = {
pre-commit-check = pre-commit-hooks.lib.${system}.run {
src = ./.;
hooks = {
nixpkgs-fmt.enable = true;
};
};
};
devShell = nixpkgs.legacyPackages.${system}.mkShell {
inherit (self.checks.${system}.pre-commit-check) shellHook;
};
};
in rec {
packages = {
inherit (pkgs) dbsql;
githubActions = nix-github-actions.lib.mkGithubMatrix {
checks = nixpkgs.lib.getAttrs [ "x86_64-linux" "x86_64-darwin" ] self.packages;
};
};
packages.default = self.packages.${system}.dbsql;
packages.container = pkgs.callPackage ./container.nix { package = packages.default; };
apps.dbsql = flake-utils.lib.mkApp { drv = packages.default; };
apps.${system}.default = apps.dbsql;
devShells.default = import ./shell.nix { inherit pkgs; };
}
);
}

28
shell.nix Normal file
View file

@ -0,0 +1,28 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
nativeBuildInputs = with pkgs.buildPackages; [
act
autoconf
ed
gcc
gdb
gettext
libtool
m4
pkg-config
perl
ripgrep
python3
];
buildInputs = with pkgs; [
# (enableDebuging db4)
db4
glibc.out
glibc.static
tcl-8_5
];
DOCKER_BUILDKIT = 1;
}

277
src/api.c
View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: api.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -50,9 +48,7 @@ typedef struct {
*
* STATIC: static void __corrupt_schema __P((init_data_t *));
*/
static void
__corrupt_schema(data)
init_data_t *data;
static void __corrupt_schema(init_data_t *data)
{
__str_append(data->err_msgs, "malformed database schema",
(char*)0);
@ -72,14 +68,10 @@ __corrupt_schema(data)
* argv[4] = "1" for temporary files, "0" for main database,
* "2" or more for auxiliary database files.
*
* STATIC: static int __init_callback __P((init_data_t *));
* STATIC: static int __init_callback __P((void *, int, char **, char **));
*/
static int
__init_callback(init, argc, argv, col_name)
void *init;
int argc;
char **argv;
char **col_name;
__init_callback(void* init, int argc, char **argv, char **col_name)
{
init_data_t *data = (init_data_t*)init;
parser_t parser;
@ -100,12 +92,12 @@ __init_callback(init, argc, argv, col_name)
case 'v': /* FALLTHROUGH */
case 'i': /* FALLTHROUGH */
case 't':
/* CREATE TABLE, CREATE INDEX, or CREATE VIEW statements */
/* CREATE TABLE, CREATE INDEX, or CREATE VIEW statements */
if (argv[2] == 0 || argv[4] == 0) {
__corrupt_schema(data);
return 1;
}
/*
/*
* Call the parser to process a CREATE TABLE, INDEX or VIEW.
* But because sParse.initFlag is set to 1, no VDBE code is
* generated or executed. All the parser does is build the
@ -154,7 +146,7 @@ __init_callback(init, argc, argv, col_name)
default:
/* This can not happen! */
nerr = 1;
DBSQL_ASSERT(nerr == 0); /* TODO create a __fatal() */
DBSQL_ASSERT(nerr == 0); /* TODO: create a __fatal() */
}
return nerr;
}
@ -171,13 +163,8 @@ __init_callback(init, argc, argv, col_name)
* STATIC: static int __init_db_file __P((DBSQL *, int, char **));
*/
static int
__init_db_file(dbp, dbi, err_msgs)
DBSQL *dbp;
int dbi;
char **err_msgs;
__init_db_file(DBSQL* dbp, int dbi, char **err_msgs)
{
int rc;
int size;
table_t *table;
char *args[6];
char db_num[30];
@ -187,7 +174,7 @@ __init_db_file(dbp, dbi, err_msgs)
/*
* The master database table has a structure like this
*/
static char master_schema[] =
static char master_schema[] =
"CREATE TABLE " MASTER_NAME "(\n"
" type text,\n"
" name text,\n"
@ -196,7 +183,7 @@ __init_db_file(dbp, dbi, err_msgs)
" sql text\n"
")"
;
static char temp_master_schema[] =
static char temp_master_schema[] =
"CREATE TEMP TABLE " TEMP_MASTER_NAME "(\n"
" type text,\n"
" name text,\n"
@ -212,7 +199,7 @@ __init_db_file(dbp, dbi, err_msgs)
* master is an increasing integer. So we can play back master
* and all the CREATE statements will appear in the right order.
*/
static char init_script[] =
static char init_script[] =
"SELECT type, name, rootpage, sql, 1 FROM " TEMP_MASTER_NAME " "
"UNION ALL "
"SELECT type, name, rootpage, sql, 0 FROM " MASTER_NAME "";
@ -300,7 +287,7 @@ __init_db_file(dbp, dbi, err_msgs)
* used to store temporary tables, and any additional database files
* created using ATTACH statements. Return a success code. If an
* error occurs, write an error message into *pzErrMsg.
*
*
* After the database is initialized, the DBSQL_Initialized
* bit is set in the flags field of the dbsql_t structure. An
* attempt is made to initialize the database as soon as it
@ -311,13 +298,11 @@ __init_db_file(dbp, dbi, err_msgs)
* PUBLIC: int __init_databases __P((DBSQL *, char**));
*/
int
__init_databases(dbp, err_msgs)
DBSQL *dbp;
char **err_msgs;
__init_databases(DBSQL* dbp, char **err_msgs)
{
int i = 0;
int rc = DBSQL_SUCCESS;
DBSQL_ASSERT((dbp->flags & DBSQL_Initialized) == 0);
for(i = 0; rc == DBSQL_SUCCESS && i < dbp->nDb; i++) {
@ -386,7 +371,7 @@ __sqldb_init(p, dbp, name, temp, mem, init_sm)
* is locked) then that step is deferred until the first call to
* DBSQL->exec().
*
* STATIC: int __api_open __P((DBSQL *, const char *, int, char **));
* STATIC: static int __api_open __P((DBSQL *, const char *, int, char **));
*/
int
__api_open(dbp, filename, mode, err_msgs)
@ -410,7 +395,7 @@ __api_open(dbp, filename, mode, err_msgs)
dbp->priorNewRowid = 0;
dbp->magic = DBSQL_STATUS_BUSY;
dbp->nDb = 2;
if (__dbsql_calloc(dbp, 2, sizeof(dbsql_db_t), &dbp->aDb) == ENOMEM)
goto no_mem_on_open1;
@ -469,8 +454,7 @@ __api_open(dbp, filename, mode, err_msgs)
* STATIC: static int __api_last_inserted_rowid __P((DBSQL *));
*/
int
__api_last_inserted_rowid(dbp)
DBSQL *dbp;
__api_last_inserted_rowid(DBSQL* dbp)
{
return dbp->lastRowid;
}
@ -482,8 +466,7 @@ __api_last_inserted_rowid(dbp)
* STATIC: static int __api_last_change_count __P((DBSQL *));
*/
int
__api_last_change_count(dbp)
DBSQL *dbp;
__api_last_change_count(DBSQL* dbp)
{
return dbp->_num_last_changes;
}
@ -496,8 +479,7 @@ __api_last_change_count(dbp)
* STATIC: static int __api_total_change_count __P((DBSQL *));
*/
int
__api_total_change_count(dbp)
DBSQL *dbp;
__api_total_change_count(DBSQL* dbp)
{
return dbp->_num_total_changes;
}
@ -509,8 +491,7 @@ __api_total_change_count(dbp)
* STATIC: static int __api_close __P((DBSQL *));
*/
int
__api_close(dbp)
DBSQL *dbp;
__api_close(DBSQL* dbp)
{
hash_ele_t *i;
int j;
@ -557,9 +538,9 @@ __api_close(dbp)
*
* STATIC: static int __process_sql __P((DBSQL *, const char *,
* STATIC: dbsql_callback, void *, const char **,
* STATIC: dbsql_stmt_t, char **))
* STATIC: dbsql_stmt_t **, char **));
*
* dbp The database on which the SQL executes
* dbp The database
* sql The SQL to be executed
* callback Invoke this callback routine
* arg First argument to callback()
@ -568,14 +549,7 @@ __api_close(dbp)
* err_msgs OUT: Write error messages here
*/
static int
__process_sql(dbp, sql, callback, arg, tail, vm, err_msgs)
DBSQL *dbp;
const char *sql;
dbsql_callback callback;
void *arg;
const char **tail;
dbsql_stmt_t **vm;
char **err_msgs;
__process_sql(DBSQL *dbp, const char *sql, dbsql_callback callback, void *arg, const char **tail, dbsql_stmt_t **vm, char **err_msgs)
{
parser_t parser;
@ -600,7 +574,7 @@ __process_sql(dbp, sql, callback, arg, tail, vm, err_msgs)
*err_msgs = 0;
}
}
/* TODO: in the __meta subdatabase get:'format_version'
/* TODO: in the __meta subdatabase get:'format_version'
if (dbp->file_format < 3) {
__safety_off(dbp);
__str_append(err_msgs, "obsolete database file format",
@ -677,12 +651,7 @@ __process_sql(dbp, sql, callback, arg, tail, vm, err_msgs)
* arg First argument to callback()
* err_msgs Write error messages here
*/
int __api_exec(dbp, sql, callback, arg, err_msgs)
DBSQL *dbp;
const char *sql;
dbsql_callback callback;
void *arg;
char **err_msgs;
int __api_exec(DBSQL *dbp, const char *sql, dbsql_callback callback, void *arg, char **err_msgs)
{
return __process_sql(dbp, sql, callback, arg, 0, 0, err_msgs);
}
@ -702,12 +671,7 @@ int __api_exec(dbp, sql, callback, arg, err_msgs)
* err_msgs OUT: Write error messages here
*/
int
__api_prepare(dbp, sql, tail, stmt, err_msgs)
DBSQL *dbp;
const char *sql;
const char **tail;
dbsql_stmt_t **stmt;
char **err_msgs;
__api_prepare(DBSQL *dbp, const char *sql, const char **tail, dbsql_stmt_t **stmt, char **err_msgs)
{
return __process_sql(dbp, sql, 0, 0, tail, stmt, err_msgs);
}
@ -733,9 +697,7 @@ __api_prepare(dbp, sql, tail, stmt, err_msgs)
* with it.
*/
int
__api_finalize(stmt, err_msgs)
dbsql_stmt_t *stmt;
char **err_msgs;
__api_finalize(dbsql_stmt_t* stmt, char **err_msgs)
{
int rc = __vdbe_finalize((vdbe_t*)stmt, err_msgs);
__str_urealloc(err_msgs);
@ -758,9 +720,7 @@ __api_finalize(stmt, err_msgs)
* is returned.
*/
int
__api_reset(stmt, err_msgs)
dbsql_stmt_t *stmt;
char **err_msgs;
__api_reset(dbsql_stmt_t* stmt, char **err_msgs)
{
int rc = __vdbe_reset((vdbe_t*)stmt, err_msgs);
__vdbe_make_ready((vdbe_t*)stmt, -1, 0, 0, 0);
@ -783,11 +743,7 @@ __api_reset(stmt, err_msgs)
* count Number of times table has been busy
*/
static int
__default_busy_callback(dbp, arg, not_used, count)
DBSQL *dbp;
void *arg;
const char *not_used;
int count;
__default_busy_callback(DBSQL *dbp, void *arg, const char *not_used, int count)
{
#if defined(__LP64) || defined(__LP64__)
u_int64_t timeout = (u_int64_t)arg;
@ -814,13 +770,13 @@ __default_busy_callback(dbp, arg, not_used, count)
if (delay <= 0)
return 0;
}
__os_sleep(dbp, 0, delay);
__os_sleep(0, delay);
return 1;
#else
if ((count + 1) * 1000 > timeout) {
return 0;
}
__os_sleep(dbp, 1, 0);
__os_sleep(1, 0);
return 1;
#endif
}
@ -834,10 +790,7 @@ __default_busy_callback(dbp, arg, not_used, count)
* STATIC: int (*)(DBSQL *, void*, const char*, int), void *));
*/
void
__api_set_busy_callback(dbp, busy, arg)
DBSQL *dbp;
int (*busy)(DBSQL *, void *, const char*, int);
void *arg;
__api_set_busy_callback(DBSQL *dbp, int (*busy)(DBSQL *, void *, const char*, int), void *arg)
{
dbp->xBusyCallback = busy;
dbp->pBusyArg = arg;
@ -854,11 +807,7 @@ __api_set_busy_callback(dbp, busy, arg)
* STATIC: int (*)(void*), void *));
*/
void
__api_set_progress_callback(dbp, num_ops, progress, arg)
DBSQL *dbp;
int num_ops;
int (*progress)(void*);
void *arg;
__api_set_progress_callback(DBSQL* dbp, int num_ops, int (*progress)(void*), void* arg)
{
if (num_ops > 0) {
dbp->xProgress = progress;
@ -881,16 +830,14 @@ __api_set_progress_callback(dbp, num_ops, progress, arg)
* STATIC: static void __api_set_busy_timeout __P((DBSQL *, int));
*/
void
__api_set_busy_timeout(dbp, ms)
DBSQL *dbp;
int ms;
__api_set_busy_timeout(DBSQL* dbp, int ms)
{
#if defined(__LP64) || defined(__LP64__)
u_int64_t delay = ms;
#else
u_int32_t delay = ms;
#endif
if (ms > 0)
dbp->set_busycall(dbp, __default_busy_callback, (void*)delay);
else
@ -904,8 +851,7 @@ __api_set_busy_timeout(dbp, ms)
* PUBLIC: void __api_interrupt __P((DBSQL *));
*/
void
__api_interrupt(dbp)
DBSQL *dbp;
__api_interrupt(DBSQL* dbp)
{
dbp->flags |= DBSQL_Interrupt;
}
@ -917,10 +863,7 @@ __api_interrupt(dbp)
* EXTERN: const char *dbsql_version __P((int *, int *, int *));
*/
const char *
dbsql_version(major, minor, patch)
int *major;
int *minor;
int *patch;
dbsql_version(int* major, int* minor, int* patch)
{
*major = DBSQL_VERSION_MAJOR;
*minor = DBSQL_VERSION_MINOR;
@ -964,22 +907,13 @@ __api_get_encoding()
* name Name of the function to add
* num_arg Number of arguments
* encoding The encoding expected by the functions
* user_data User data
* user_data User data
* func The function's implementation
* step Step is used by aggregate functions
* finalize When finished with
* finalize When finished with an aggregate function
*/
int
__api_create_function(dbp, name, num_arg, user_data, encoding, func,
step, finalize)
DBSQL *dbp;
const char *name;
int num_arg;
void *user_data;
int encoding;/*TODO: not yet used*/
void (*func)(dbsql_func_t*, int, const char**);
void (*step)(dbsql_func_t*, int, const char**);
void (*finalize)(dbsql_func_t*);
__api_create_function(DBSQL *dbp, const char *name, int encoding, int num_arg, void *user_data, /*TODO: not yet used*/ void (*func)(dbsql_func_t*, int, const char**), void (*step)(dbsql_func_t*, int, const char**), void (*finalize)(dbsql_func_t*))
{
func_def_t *p;
int name_len;
@ -1013,7 +947,7 @@ __api_create_function(dbp, name, num_arg, user_data, encoding, func,
* __api_exec_printf --
*
* STATIC: static int __api_exec_printf __P((DBSQL *, const char *,
* STATIC: dbsql_callback, void *, char **, ...));
* STATIC: dbsql_callback, void *, char **, ...))
* STATIC: __attribute__ ((__format__ (__printf__, 2, 5)));
*
* dbp The DBSQL database
@ -1028,13 +962,8 @@ static int
__api_exec_printf(DBSQL *dbp, const char *fmt, dbsql_callback callback,
void *arg, char **err_msgs, ...)
#else
__api_exec_printf(dbp, fmt, callback, arg, err_msgs, ...)
DBSQL *dbp;
const char *fmt;
dbsql_callback callback;
void *arg;
char **err_msgs;
va_dcl
__api_exec_printf(DBSQL *dbp, const char *fmt, dbsql_callback callback,
void *arg, char **err_msgs, va_dcl)
#endif
{
va_list ap;
@ -1060,13 +989,7 @@ __api_exec_printf(dbp, fmt, callback, arg, err_msgs, ...)
* va_list Args list
*/
static int
__api_exec_vprintf(dbp, fmt, callback, arg, err_msgs, ap)
DBSQL *dbp;
const char *fmt;
dbsql_callback callback;
void *arg;
char **err_msgs;
va_list ap;
__api_exec_vprintf(DBSQL *dbp, const char *fmt, dbsql_callback callback, void *arg, char **err_msgs, va_list ap)
{
char *sql;
int rc;
@ -1081,7 +1004,7 @@ __api_exec_vprintf(dbp, fmt, callback, arg, err_msgs, ap)
* __api_exec_table_printf --
*
* STATIC: static int __api_exec_table_printf __P((DBSQL *, const char *,
* STATIC: char ***, int *, int *, char **, ...));
* STATIC: char ***, int *, int *, char **, ...))
* STATIC: __attribute__ ((__format__ (__printf__, 2, 7)));
*
* dbp The DBSQL database
@ -1097,14 +1020,7 @@ static int
__api_exec_table_printf(DBSQL *dbp, const char *fmt, char ***results,
int *num_rows, int *num_cols, char **err_msgs, ...)
#else
__api_exec_printf(dbp, fmt, results, num_rows, num_cols, err_msgs, ...)
DBSQL *dbp;
const char *fmt;
char ***results;
int *num_rows;
int *num_cols;
char **err_msgs;
va_dcl
__api_exec_printf(DBSQL *dbp, const char *fmt, char ***results, int *num_rows, int *num_cols, char **err_msgs, va_dcl)
#endif
{
va_list ap;
@ -1132,14 +1048,7 @@ __api_exec_printf(dbp, fmt, results, num_rows, num_cols, err_msgs, ...)
* ap Arguments to the format string
*/
static int
__api_exec_table_vprintf(dbp, fmt, results, num_rows, num_cols, err_msgs, ap)
DBSQL *dbp;
const char *fmt;
char ***results;
int *num_rows;
int *num_cols;
char **err_msgs;
va_list ap;
__api_exec_table_vprintf(DBSQL *dbp, const char *fmt, char ***results, int *num_rows, int *num_cols, char **err_msgs, va_list ap)
{
char *sql;
int rc;
@ -1159,15 +1068,12 @@ __api_exec_table_vprintf(dbp, fmt, results, num_rows, num_cols, err_msgs, ap)
* STATIC: static int __api_func_return_type __P((DBSQL *, const char *, int));
*/
int
__api_func_return_type(dbp, name, data_type)
DBSQL *dbp;
const char *name;
int data_type;
__api_func_return_type(DBSQL *dbp, const char *name, int data_type)
{
func_def_t *p = (func_def_t*)__hash_find((hash_t*)dbp->fns, name,
strlen(name));
while(p) {
p->dataType = data_type;
p->dataType = data_type;
p = p->pNext;
}
return DBSQL_SUCCESS;
@ -1176,7 +1082,7 @@ __api_func_return_type(dbp, name, data_type)
/*
* __api_set_trace_callback --
* Register a trace function. The 'arg' from the previously
* registered trace is returned.
* registered trace is returned.
* A NULL trace function means that no tracing is executes. A non-NULL
* trace is a pointer to a function that is invoked at the start of each
* __api_exec().
@ -1185,10 +1091,7 @@ __api_func_return_type(dbp, name, data_type)
* STATIC: void (*trace)(void*, const char *), void *));
*/
void *
__api_set_trace_callback(dbp, trace, arg)
DBSQL *dbp;
void (*trace)(void*,const char*);
void *arg;
__api_set_trace_callback(DBSQL *dbp, void (*trace)(void*,const char*), void *arg)
{
void *old = dbp->pTraceArg;
dbp->xTrace = trace;
@ -1210,10 +1113,7 @@ __api_set_trace_callback(dbp, trace, arg)
* arg Argument to the function
*/
void *
__api_set_commit_callback(dbp, callback, arg)
DBSQL *dbp;
int (*callback)(void*);
void *arg;
__api_set_commit_callback(DBSQL* dbp, int (*callback)(void*), void* arg)
{
void *old = dbp->pCommitArg;
dbp->xCommitCallback = callback;
@ -1227,8 +1127,7 @@ __api_set_commit_callback(dbp, callback, arg)
* STATIC: static DB_ENV *__api_get_dbenv __P((DBSQL *));
*/
static DB_ENV *
__api_get_dbenv(dbp)
DBSQL *dbp;
__api_get_dbenv(DBSQL* dbp)
{
return dbp->dbenv;
}
@ -1244,9 +1143,7 @@ __api_get_dbenv(dbp)
* callback Function to invoke on each commit
*/
void
__api_set_errcall(dbp, callback)
DBSQL *dbp;
void (*callback)(const char *, char *);
__api_set_errcall(DBSQL *dbp, void (*callback)(const char *, char *))
{
dbp->dbsql_errcall = callback;
}
@ -1261,9 +1158,7 @@ __api_set_errcall(dbp, callback)
* file Open file stream for suitable for writing
*/
void
__api_set_errfile(dbp, file)
DBSQL *dbp;
FILE *file;
__api_set_errfile(DBSQL* dbp, FILE* file)
{
dbp->dbsql_errfile = file;
}
@ -1278,16 +1173,14 @@ __api_set_errfile(dbp, file)
* file OUT: The file used for error messages
*/
void
__api_get_errfile(dbp, file)
DBSQL *dbp;
FILE **file;
__api_get_errfile(DBSQL* dbp, FILE **file)
{
*file = dbp->dbsql_errfile;
}
/*
* __api_set_errpfx --
* Set a prefix for use when writting error messages.
* Set a prefix for use when writing error messages.
*
* STATIC: static void __api_set_errpfx __P((DBSQL *, const char *));
*
@ -1295,9 +1188,7 @@ __api_get_errfile(dbp, file)
* prefix A prefix string
*/
void
__api_set_errpfx(dbp, prefix)
DBSQL *dbp;
const char *prefix;
__api_set_errpfx(DBSQL *dbp, const char *prefix)
{
__dbsql_strdup(dbp, prefix, &dbp->dbsql_errpfx);
}
@ -1306,15 +1197,13 @@ __api_set_errpfx(dbp, prefix)
* __api_get_errpfx --
* Get the error prefix.
*
* STATIC: static void __api_get_errpfx __P((DBSQL *, char **));
* STATIC: static void __api_get_errpfx __P((DBSQL *, const char **));
*
* dbp Attach the hook to this database
* prefix OUT: The prefix string
*/
void
__api_get_errpfx(dbp, prefix)
DBSQL *dbp;
const char **prefix;
__api_get_errpfx(DBSQL *dbp, const char **prefix)
{
*prefix = dbp->dbsql_errpfx;
}
@ -1327,12 +1216,7 @@ __api_get_errpfx(dbp, prefix)
* EXTERN: const char *, int, u_int32_t flags));
*/
int
dbsql_create_env(dbpp, dir, crypt, mode, flags)
DBSQL **dbpp;
const char *dir;
const char *crypt;
int mode;
u_int32_t flags;
dbsql_create_env(DBSQL **dbpp, const char *dir, const char *crypt, int mode, u_int32_t flags)
{
int rc;
DB_ENV *dbenv;
@ -1341,9 +1225,9 @@ dbsql_create_env(dbpp, dir, crypt, mode, flags)
int env_open_flags = DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL |
DB_INIT_TXN | DB_CREATE;
/* Setup the DB_ENV with that directory as DB_HOME */
/* Setup the DB_ENV with that directory as DB_HOME */
if ((rc = db_env_create(&dbenv, 0)) != 0) {
__dbsql_err(NULL, db_strerror(rc));
__dbsql_err(NULL, "%s", db_strerror(rc));
return DBSQL_CANTOPEN;
}
@ -1351,27 +1235,32 @@ dbsql_create_env(dbpp, dir, crypt, mode, flags)
if (dir == 0 || dir[0] == '\0') {
/* When dir is NULL, place all resources in memory. */
env_open_flags |= DB_PRIVATE;
dbenv->set_flags(dbenv, DB_LOG_INMEMORY, 1);
/* Specify the size of the in-memory log buffer. */
rc = dbenv->log_set_config(dbenv, DB_LOG_IN_MEMORY, 1);
if (rc) {
__dbsql_err(NULL, "%s\n", db_strerror(rc));
return DBSQL_CANTOPEN;
}
/* Specify the size of the in-memory log buffer. */
if ((rc = dbenv->set_lg_bsize(dbenv, 10 * 1024 * 1024)) != 0) {
__dbsql_err(NULL, db_strerror(rc));
__dbsql_err(NULL, "%s\n", db_strerror(rc));
return DBSQL_CANTOPEN;
}
} else {
if (__os_exists(dir, &dir_p) == 0) {
if (__dbsql_exists(NULL, dir, &dir_p) == 0) {
if (dir_p) {
char buf[1024];
snprintf(buf, 1024, "%s%s%s", dir,
PATH_SEPARATOR, dir);
if (__os_exists(buf, &dir_p) == 0)
if (__dbsql_exists(NULL, buf, &dir_p) == 0)
env_open_flags = DB_JOINENV;
} else {
__dbsql_err(NULL,
"Environment must be a directory.");
return DBSQL_INVALID_NAME;
}
} else { /* TODO __db_omode("rwxrwxrwx"):mode) != 0) */
if (mkdir(dir, mode == 0 ? 0777 : mode) != 0)
} else {
mode = mode == 0 ? __dbsql_omode(NULL, "rwxrwxrwx") : mode;
if (__dbsql_mkdir(NULL, dir, mode) != 0)
return errno;
}
}
@ -1380,13 +1269,13 @@ dbsql_create_env(dbpp, dir, crypt, mode, flags)
env_open_flags |= DB_THREAD;
if ((rc = dbenv->set_lk_detect(dbenv, DB_LOCK_DEFAULT)) != 0) {
__dbsql_err(NULL, db_strerror(rc));
__dbsql_err(NULL, "%s\n", db_strerror(rc));
dbenv->close(dbenv, 0);
return DBSQL_CANTOPEN;
}
if ((rc = dbenv->set_cachesize(dbenv, 0, 1 * 1024 * 1024, 1)) != 0) {
__dbsql_err(NULL, db_strerror(rc));
__dbsql_err(NULL, "%s\n", db_strerror(rc));
dbenv->close(dbenv, 0);
return DBSQL_CANTOPEN;
}
@ -1394,14 +1283,14 @@ dbsql_create_env(dbpp, dir, crypt, mode, flags)
if (crypt && crypt[0]) {
if ((rc = dbenv->set_encrypt(dbenv, crypt,
DB_ENCRYPT_AES)) != 0) {
__dbsql_err(NULL, db_strerror(rc));
__dbsql_err(NULL, "%s\n", db_strerror(rc));
dbenv->close(dbenv, 0);
return DBSQL_CANTOPEN;
}
}
if ((rc = dbenv->open(dbenv, dir, env_open_flags, mode)) != 0) {
__dbsql_err(NULL, db_strerror(rc));
__dbsql_err(NULL, "%s\n", db_strerror(rc));
dbenv->close(dbenv, 0);
return DBSQL_CANTOPEN;
}
@ -1422,20 +1311,16 @@ dbsql_create_env(dbpp, dir, crypt, mode, flags)
* EXTERN: int dbsql_create __P((DBSQL **, DB_ENV *, u_int32_t));
*/
int
dbsql_create(dbpp, dbenv, flags)
DBSQL **dbpp;
DB_ENV *dbenv;
u_int32_t flags;
dbsql_create(DBSQL **dbpp, DB_ENV* dbenv, u_int32_t flags)
{
DBSQL *dbp;
DBSQL_ASSERT(dbpp != 0);
if (dbenv == NULL)
return EINVAL; /* TODO better error message */
/*
* Does the library expect data to be encoded as UTF-8
* or iso8859? The following global constant always
* lets us know.
* TODO: Make this configurable as a flag and part of the meta
* database.
@ -1445,7 +1330,7 @@ dbsql_create(dbpp, dbenv, flags)
#else
DBSQL_GLOBAL(encoding) = "iso8859";
#endif
if (__dbsql_calloc(NULL, 1, sizeof(DBSQL), &dbp) == ENOMEM)
return DBSQL_NOMEM;

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: api_table.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -61,11 +59,7 @@ typedef struct table_result {
* STATIC: static int __get_table_cb __P((void *, int, char **, char **));
*/
static int
__get_table_cb(arg, ncol, argv, colv)
void *arg;
int ncol;
char **argv;
char **colv;
__get_table_cb(void* arg, int ncol, char* *argv, char* *colv)
{
int rc;
table_result_t *p = (table_result_t*)arg;
@ -250,8 +244,7 @@ __api_get_table(dbp, sql, results, nrows, ncols, err_msgs)
* result Result returned from from __api_get_table()
*/
void
__api_free_table(results)
char **results;
__api_free_table(char* *results)
{
char *last_result;

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_attach.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -40,10 +38,7 @@
* PUBLIC: void __attach __P((parser_t *, token_t *, token_t *));
*/
void
__attach(parser, file, db)
parser_t *parser;
token_t *file;
token_t *db;
__attach(parser_t* parser, token_t* file, token_t* db)
{
int rc, i;
dbsql_db_t *new;
@ -138,9 +133,7 @@ __attach(parser, file, db)
* PUBLIC: void __detach __P((parser_t *, token_t *));
*/
void
__detach(parser, db)
parser_t *parser;
token_t *db;
__detach(parser_t* parser, token_t* db)
{
int i;
DBSQL *dbp;
@ -287,9 +280,7 @@ int __ref_normalize_src_list(normctx, src_list)
* database
*/
int
__ref_normalize_select(normctx, select)
ref_normalizer_ctx_t *normctx;
select_t *select;
__ref_normalize_select(ref_normalizer_ctx_t* normctx, select_t* select)
{
while (select) {
if (__ref_normalize_expr_list(normctx, select->pEList)) {
@ -348,9 +339,7 @@ int __ref_normalize_expr(normctx, expr)
* expr The expression to be fixed to one database
*/
int
__ref_normalize_expr_list(normctx, list)
ref_normalizer_ctx_t *normctx;
expr_list_t *list;
__ref_normalize_expr_list(ref_normalizer_ctx_t* normctx, expr_list_t* list)
{
int i;
if (list == 0)

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_auth.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -99,9 +97,7 @@ int __api_set_authorizer(dbp, auth, arg)
* STATIC: static void __auth_bad_return_code __P((parser_t *, int));
*/
static void
__auth_bad_return_code(parser, rc)
parser_t *parser;
int rc;
__auth_bad_return_code(parser_t* parser, int rc)
{
char buf[20];
sprintf(buf, "(%d)", rc);
@ -130,10 +126,7 @@ __auth_bad_return_code(parser, rc)
* tab_list All table that expr might refer to
*/
void
__auth_read(parser, expr, tab_list)
parser_t *parser;
expr_t *expr;
src_list_t *tab_list;
__auth_read(parser_t* parser, expr_t* expr, src_list_t* tab_list)
{
int rc;
DBSQL *dbp = parser->db;
@ -264,8 +257,7 @@ void __auth_context_push(parser, authctx, context)
* PUBLIC: void __auth_context_pop __P((auth_context_t *));
*/
void
__auth_context_pop(authctx)
auth_context_t *authctx;
__auth_context_pop(auth_context_t* authctx)
{
if (authctx->pParse) {
authctx->pParse->zAuthContext = authctx->zAuthContext;

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_build.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -56,9 +54,7 @@
* PUBLIC: void __parse_begin __P((parser_t *, int));
*/
void
__parse_begin(parser, explain_flag)
parser_t *parser;
int explain_flag;
__parse_begin(parser_t* parser, int explain_flag)
{
DBSQL *dbp = parser->db;
int i;
@ -90,11 +86,7 @@ __parse_begin(parser, explain_flag)
* STATIC: static int __null_callback __P((void *, int , char **, char **));
*/
static int
__null_callback(not_used, n, a, b)
void *not_used;
int n;
char **a;
char **b;
__null_callback(void* not_used, int n, char* *a, char* *b)
{
return 0;
}
@ -102,7 +94,7 @@ __null_callback(not_used, n, a, b)
/*
* __parse_exec --
* This routine is called after a single SQL statement has been
* parsed and we want to execute the VDBE code to implement
* parsed and we want to execute the VDBE code to implement
* that statement. Prior action routines should have already
* constructed VDBE code to do the work of the SQL statement.
* This routine just has to execute the VDBE code.
@ -112,8 +104,7 @@ __null_callback(not_used, n, a, b)
* PUBLIC: void __parse_exec __P((parser_t *));
*/
void
__parse_exec(parser)
parser_t *parser;
__parse_exec(parser_t* parser)
{
int rc = DBSQL_SUCCESS;
DBSQL *dbp = parser->db;
@ -165,7 +156,7 @@ __parse_exec(parser)
/*
* __find_table --
* Locate the in-memory structure that describes
* Locate the in-memory structure that describes
* a particular database table given the name
* of that table and (optionally) the name of the database
* containing the table. Return NULL if not found.
@ -201,7 +192,7 @@ __find_table(dbp, name, database)
/*
* __locate_table --
* Locate the in-memory structure that describes
* Locate the in-memory structure that describes
* a particular database table given the name
* of that table and (optionally) the name of the database
* containing the table. Return NULL if not found.
@ -238,7 +229,7 @@ __locate_table(parser, name, database)
/*
* __find_index --
* Locate the in-memory structure that describes
* Locate the in-memory structure that describes
* a particular index given the name of that index
* and the name of the database that contains the index.
* Return NULL if not found.
@ -282,9 +273,7 @@ __find_index(dbp, name, database)
* STATIC: static void __delete_index __P((DBSQL *, index_t *));
*/
static void
__delete_index(dbp, index)
DBSQL *dbp;
index_t *index;
__delete_index(DBSQL* dbp, index_t* index)
{
index_t *old;
@ -307,9 +296,7 @@ __delete_index(dbp, index)
* PUBLIC: void __unlink_and_delete_index __P((DBSQL *, index_t *));
*/
void
__unlink_and_delete_index(dbp, index)
DBSQL *dbp;
index_t *index;
__unlink_and_delete_index(DBSQL* dbp, index_t* index)
{
if (index->pTable->pIndex == index) {
index->pTable->pIndex = index->pNext;
@ -338,9 +325,7 @@ __unlink_and_delete_index(dbp, index)
* PUBLIC: void __reset_internal_schema __P((DBSQL *, int));
*/
void
__reset_internal_schema(dbp, idb)
DBSQL *dbp;
int idb;
__reset_internal_schema(DBSQL* dbp, int idb)
{
hash_ele_t *ele;
hash_t temp1;
@ -406,8 +391,7 @@ __reset_internal_schema(dbp, idb)
* PUBLIC: void __rollback_internal_changes __P((DBSQL *));
*/
void
__rollback_internal_changes(dbp)
DBSQL *dbp;
__rollback_internal_changes(DBSQL* dbp)
{
if (dbp->flags & DBSQL_InternChanges) {
__reset_internal_schema(dbp, 0);
@ -421,8 +405,7 @@ __rollback_internal_changes(dbp)
* PUBLIC: void __commit_internal_changes __P((DBSQL *));
*/
void
__commit_internal_changes(dbp)
DBSQL *dbp;
__commit_internal_changes(DBSQL* dbp)
{
dbp->aDb[0].schema_sig = dbp->next_sig;
dbp->flags &= ~DBSQL_InternChanges;
@ -435,7 +418,7 @@ __commit_internal_changes(dbp)
* This routine just deletes the data structure. It does not unlink
* the table data structure from the hash table. Nor does it remove
* foreign keys from the aFKey hash table. But it does destroy
* memory structures of the indices and foreign keys associated with
* memory structures of the indices and foreign keys associated with
* the table.
* Indices associated with the table are unlinked from the "db"
* data structure if db!=NULL. If db==NULL, indices attached to
@ -445,9 +428,7 @@ __commit_internal_changes(dbp)
* PUBLIC: void __vdbe_delete_table __P((DBSQL *, table_t *));
*/
void
__vdbe_delete_table(dbp, table)
DBSQL *dbp;
table_t *table;
__vdbe_delete_table(DBSQL* dbp, table_t* table)
{
int i;
index_t *index, *next;
@ -468,7 +449,7 @@ __vdbe_delete_table(dbp, table)
/*
* Delete all foreign keys associated with this table. The keys
* should have already been unlinked from the dbp->aFKey hash table
* should have already been unlinked from the dbp->aFKey hash table
*/
for (fkey = table->pFKey; fkey; fkey = next_fkey) {
next_fkey = fkey->pNextFrom;
@ -500,9 +481,7 @@ __vdbe_delete_table(dbp, table)
* STATIC: static void __unlink_and_delete_table __P((DBSQL, table_t *));
*/
static void
__unlink_and_delete_table(dbp, table)
DBSQL *dbp;
table_t *table;
__unlink_and_delete_table(DBSQL* dbp, table_t* table)
{
table_t *old;
foreign_key_t *f1, *f2;
@ -538,8 +517,7 @@ __unlink_and_delete_table(dbp, table)
* PUBLIC: char *__table_name_from_token __P((token_t *));
*/
char *
__table_name_from_token(name)
token_t *name;
__table_name_from_token(token_t* name)
{
char *n;
__dbsql_strndup(NULL, name->z, &n, name->n);
@ -550,7 +528,7 @@ __table_name_from_token(name)
/*
* __open_master_table --
* Generate code to open the appropriate master table. The table
* opened will be DBSQL_MASTER for persistent tables and
* opened will be DBSQL_MASTER for persistent tables and
* DBSQL_TEMP_MASTER for temporary tables. The table is opened
* on cursor 0.
*
@ -638,9 +616,9 @@ void __start_table(parser, start, name, temp, view)
}
}
#endif
/*
/*
* Before trying to create a temporary table, make sure the DB for
* holding temporary tables is open.
*/
@ -689,7 +667,7 @@ void __start_table(parser, start, name, temp, view)
if ((idx = __find_index(dbp, n, 0)) != 0 &&
(idx->iDb == 0 || !parser->initFlag)) {
__str_append(&parser->zErrMsg,
"there is already an index named ",
"there is already an index named ",
n, (char*)0);
__dbsql_free(dbp, n);
parser->nErr++;
@ -744,9 +722,7 @@ void __start_table(parser, start, name, temp, view)
* PUBLIC: void __add_column __P((parser_t *, token_t *));
*/
void
__add_column(parser, name)
parser_t *parser;
token_t *name;
__add_column(parser_t* parser, token_t* name)
{
table_t *table;
int i;
@ -791,9 +767,7 @@ __add_column(parser, name)
* PUBLIC: void __add_not_null __P((parser_t *, int));
*/
void
__add_not_null(parser, on_error)
parser_t *parser;
int on_error;
__add_not_null(parser_t* parser, int on_error)
{
table_t *table;
int i;
@ -815,12 +789,9 @@ __add_not_null(parser, on_error)
* in 'type'.
*
* PUBLIC: void __add_column_type __P((parser_t *, token_t *, token_t *));
*/
*/
void
__add_column_type(parser, first, last)
parser_t *parser;
token_t *first;
token_t *last;
__add_column_type(parser_t* parser, token_t* first, token_t* last)
{
table_t *table;
int i, j;
@ -861,10 +832,7 @@ __add_column_type(parser, first, last)
* PUBLIC: void __add_default_value __P((parser_t *, token_t *, int));
*/
void
__add_default_value(parser, val, minus)
parser_t *parser;
token_t *val;
int minus;
__add_default_value(parser_t* parser, token_t* val, int minus)
{
table_t *table;
int i;
@ -886,7 +854,7 @@ __add_default_value(parser, val, minus)
/*
* __add_primary_key --
*
* Designate the PRIMARY KEY for the table. 'list' is a list of names
* Designate the PRIMARY KEY for the table. 'list' is a list of names
* of columns that form the primary key. If 'list' is NULL, then the
* most recently added column of the table is the primary key.
* A table can have at most one primary key. If the table already has
@ -906,10 +874,7 @@ __add_default_value(parser, val, minus)
* PUBLIC: void __add_primary_key __P((parser_t *, id_list_t *, int));
*/
void
__add_primary_key(parser, list, on_error)
parser_t *parser;
id_list_t *list;
int on_error;
__add_primary_key(parser_t* parser, id_list_t* list, int on_error)
{
table_t *table = parser->pNewTable;
char *type = 0;
@ -1015,9 +980,7 @@ __collate_type(type, ntype)
* PUBLIC: void __add_collate_type __P((parser_t *, int));
*/
void
__add_collate_type(parser, type)
parser_t *parser;
int type;
__add_collate_type(parser_t* parser, int type)
{
table_t *table;
int i;
@ -1047,9 +1010,8 @@ __add_collate_type(parser, type)
*
* PUBLIC: void __change_schema_signature __P((DBSQL *, vdbe_t *));
*/
void __change_schema_signature(dbp, v)
DBSQL *dbp;
vdbe_t *v;
void
__change_schema_signature(DBSQL* dbp, vdbe_t* v)
{
static struct drand48_data rand;
static int first_time = 1;
@ -1098,10 +1060,7 @@ __ident_length(z)
* STATIC: static void __ident_put __P((char *, int *, char *));
*/
static void
__ident_put(z, idx, ident)
char *z;
int *idx;
char *ident;
__ident_put(char* z, int* idx, char* ident)
{
int i, j, need_quote;
i = *idx;
@ -1134,8 +1093,7 @@ __ident_put(z, idx, ident)
* STATIC: static char *__gen_create_table_stmt __P((table_t *));
*/
static char *
__gen_create_table_stmt(table)
table_t *table;
__gen_create_table_stmt(table_t* table)
{
int i, k, n;
char *stmt;
@ -1186,7 +1144,7 @@ __gen_create_table_stmt(table)
* recently changed, so the entry for this table already exists in
* the master table. We do not want to create it again.
* If the 'select' argument is not NULL, it means that this routine
* was called to create a table generated from a
* was called to create a table generated from a
* "CREATE TABLE ... AS SELECT ..." statement. The column names of
* the new table will match the result set of the SELECT.
*
@ -1194,10 +1152,7 @@ __gen_create_table_stmt(table)
* PUBLIC: select_t *));
*/
void
__ending_create_table_paren(parser, end, select)
parser_t *parser;
token_t *end;
select_t *select;
__ending_create_table_paren(parser_t* parser, token_t* end, select_t* select)
{
table_t *table;
DBSQL *dbp = parser->db;
@ -1248,7 +1203,7 @@ __ending_create_table_paren(parser, end, select)
if (!parser->initFlag) {
int n;
vdbe_t *v;
v = __parser_get_vdbe(parser);
if (v == 0)
return;
@ -1307,8 +1262,8 @@ __ending_create_table_paren(parser, end, select)
if (parser->explain == 0 && parser->nErr == 0) {
table_t *old;
foreign_key_t *fkey;
old = __hash_insert(&dbp->aDb[table->iDb].tblHash,
table->zName, strlen(table->zName) + 1, table);
old = __hash_insert(&dbp->aDb[table->iDb].tblHash,
table->zName, strlen(table->zName) + 1, table);
if (old) {
/* Malloc must have failed inside __hash_insert() */
DBSQL_ASSERT(table == old);
@ -1413,9 +1368,7 @@ void __create_view(parser, begin, name, select, temp)
* PUBLIC: int __view_get_column_names __P((parser_t *, table_t *));
*/
int
__view_get_column_names(parser, table)
parser_t *parser;
table_t *table;
__view_get_column_names(parser_t* parser, table_t* table)
{
expr_list_t *elist;
select_t *sel;
@ -1452,7 +1405,7 @@ __view_get_column_names(parser, table)
/*
* If we get this far, it means we need to compute the table names.
*/
/* If nCol == 0, then 'table' must be a VIEW */
/* If nCol == 0, then 'table' must be a VIEW */
DBSQL_ASSERT(table->pSelect);
sel = table->pSelect;
@ -1485,7 +1438,7 @@ __view_get_column_names(parser, table)
__select_unbind(sel);
__expr_list_delete(sel->pEList);
sel->pEList = elist;
return nerr;
return nerr;
}
/*
@ -1500,8 +1453,7 @@ __view_get_column_names(parser, table)
* STATIC: static void __view_reset_column_names __P((table_t *));
*/
static void
__view_reset_column_names(table)
table_t *table;
__view_reset_column_names(table_t* table)
{
int i;
if (table == 0 || table->pSelect==0 ) return;
@ -1524,9 +1476,7 @@ __view_reset_column_names(table)
* STATIC: static void __view_reset_all __P((DBSQL *, int));
*/
static void
__view_reset_all(dbp, idx)
DBSQL *dbp;
int idx;
__view_reset_all(DBSQL* dbp, int idx)
{
hash_ele_t *i;
if (!DB_PROPERTY_HAS_VALUE(dbp, idx, DBSQL_UNRESET_VIEWS))
@ -1549,9 +1499,7 @@ __view_reset_all(dbp, idx)
* PUBLIC: table_t *__table_from_token __P((parser_t *, token_t *));
*/
table_t *
__table_from_token(parser, token)
parser_t *parser;
token_t *token;
__table_from_token(parser_t* parser, token_t* token)
{
char *name;
table_t *table;
@ -1578,10 +1526,7 @@ __table_from_token(parser, token)
* PUBLIC: void __drop_table __P((parser_t *, token_t *name, int));
*/
void
__drop_table(parser, name, view)
parser_t *parser;
token_t *name;
int view;
__drop_table(parser_t* parser, token_t* name, int view)
{
table_t *table;
vdbe_t *v;
@ -1629,7 +1574,7 @@ __drop_table(parser, name, view)
}
#endif
if (table->readOnly) {
__str_append(&parser->zErrMsg, "table ", table->zName,
__str_append(&parser->zErrMsg, "table ", table->zName,
" may not be dropped", (char*)0);
parser->nErr++;
return;
@ -1743,9 +1688,7 @@ __drop_table(parser, name, view)
* PUBLIC: void __add_idx_key_type __P((vdbe_t *, index_t *));
*/
void
__add_idx_key_type(v, idx)
vdbe_t *v;
index_t *idx;
__add_idx_key_type(vdbe_t* v, index_t* idx)
{
char *type;
table_t *table;
@ -1821,7 +1764,7 @@ void __create_foreign_key(parser, from_col, to, to_col, flags)
if (to_col && to_col->nId!=1 ){
__str_nappend(&parser->zErrMsg,
"foreign key on ", -1,
table->aCol[col].zName, -1,
table->aCol[col].zName, -1,
" should reference only one column "
"of table ", -1, to->z, to->n, NULL);
parser->nErr++;
@ -1829,7 +1772,7 @@ void __create_foreign_key(parser, from_col, to, to_col, flags)
}
ncol = 1;
} else if (to_col && to_col->nId != from_col->nId) {
__str_append(&parser->zErrMsg,
__str_append(&parser->zErrMsg,
"number of columns in foreign key does not "
"match the number of columns in the referenced "
"table", (char*)0);
@ -1872,7 +1815,7 @@ void __create_foreign_key(parser, from_col, to, to_col, flags)
}
if (j >= table->nCol) {
__str_append(&parser->zErrMsg,
"unknown column \"",
"unknown column \"",
from_col->a[i].zName,
"\" in foreign key definition",
(char*)0);
@ -1919,9 +1862,7 @@ void __create_foreign_key(parser, from_col, to, to_col, flags)
* PUBLIC: void __defer_foreign_key __P((parser_t *, int));
*/
void
__defer_foreign_key(parser, deferred)
parser_t *parser;
int deferred;
__defer_foreign_key(parser_t* parser, int deferred)
{
table_t *table;
foreign_key_t *fkey;
@ -1931,8 +1872,8 @@ __defer_foreign_key(parser, deferred)
}
/*
* __creat_index --
* Create a new index for an SQL table. 'index' is the name of the
* __create_index --
* Create a new index for an SQL table. 'index' is the name of the
* index and pTable is the name of the table that is to be indexed.
* Both will be NULL for a primary key or an index that is created
* to satisfy a UNIQUE constraint. If pTable and pIndex are NULL,
@ -1956,14 +1897,8 @@ __defer_foreign_key(parser, deferred)
* statement.
* end The ")" that closes the CREATE INDEX statement.
*/
void __create_index(parser, token, sltable, list, on_error, start, end)
parser_t *parser;
token_t *token;
src_list_t *sltable;
id_list_t *list;
int on_error;
token_t *start;
token_t *end;
void
__create_index(parser_t* parser, token_t* token, src_list_t* sltable, id_list_t* list, int on_error, token_t* start, token_t* end)
{
table_t *table; /* Table to be indexed */
index_t *index; /* The index to be created */
@ -1971,7 +1906,7 @@ void __create_index(parser, token, sltable, list, on_error, start, end)
int i, j;
token_t null_id; /* Fake token for an empty ID list */
ref_normalizer_ctx_t normctx; /* For assigning database
names to sltable */
names to sltable */
int temp; /* True for a temporary index */
DBSQL *dbp = parser->db;
@ -2004,7 +1939,7 @@ void __create_index(parser, token, sltable, list, on_error, start, end)
goto exit_create_index;
}
if (table->iDb >= 2 && parser->initFlag == 0) {
__str_append(&parser->zErrMsg, "table ", table->zName,
__str_append(&parser->zErrMsg, "table ", table->zName,
" may not have indices added", (char*)0);
parser->nErr++;
goto exit_create_index;
@ -2019,7 +1954,7 @@ void __create_index(parser, token, sltable, list, on_error, start, end)
/*
* Find the name of the index. Make sure there is not already another
* index or table with the same name.
* index or table with the same name.
*
* Exception: If we are reading the names of permanent indices from
* the master table (because some other process changed the schema) and
@ -2036,7 +1971,7 @@ void __create_index(parser, token, sltable, list, on_error, start, end)
if (name == 0)
goto exit_create_index;
if ((idx_same_name = __find_index(dbp, name, 0)) != 0) {
__str_append(&parser->zErrMsg, "index ", name,
__str_append(&parser->zErrMsg, "index ", name,
" already exists", (char*)0);
parser->nErr++;
goto exit_create_index;
@ -2100,8 +2035,8 @@ void __create_index(parser, token, sltable, list, on_error, start, end)
goto exit_create_index;
}
/*
* Allocate the index structure.
/*
* Allocate the index structure.
*/
if (__dbsql_calloc(dbp, 1, sizeof(index_t) + (strlen(name) + 1) +
(sizeof(int) * list->nId), &index) == ENOMEM)
@ -2138,16 +2073,16 @@ void __create_index(parser, token, sltable, list, on_error, start, end)
index->aiColumn[i] = j;
}
/*
/*
* Link the new index_t structure to its table and to the other
* in-memory database structures.
* in-memory database structures.
*/
if (!parser->explain) {
index_t *rindex;
rindex = __hash_insert(&dbp->aDb[index->iDb].idxHash,
index->zName, strlen(index->zName) + 1, index);
rindex = __hash_insert(&dbp->aDb[index->iDb].idxHash,
index->zName, strlen(index->zName) + 1, index);
if (rindex) {
/* Malloc must have failed */
/* Malloc must have failed */
DBSQL_ASSERT(rindex == index);
__dbsql_free(dbp, index);
goto exit_create_index;
@ -2188,8 +2123,8 @@ void __create_index(parser, token, sltable, list, on_error, start, end)
* involves writing the index into the master table and
* filling in the index with the current table contents.
*
* The initFlag is 0 when the user first enters a CREATE INDEX
* command. The initFlag is 1 when a database is opened and
* The initFlag is 0 when the user first enters a CREATE INDEX
* command. The initFlag is 1 when a database is opened and
* CREATE INDEX statements are read out of the master table.
* In the latter case the index already exists on disk, which
* is why we don't want to recreate it.
@ -2283,12 +2218,10 @@ exit_create_index:
* This routine will drop an existing named index. This routine
* implements the DROP INDEX statement.
*
* PUBILC: __drop_index __P((parser_t *, src_list_t *));
* PUBLIC: void __drop_index __P((parser_t *, src_list_t *));
*/
void
__drop_index(parser, name)
parser_t *parser;
src_list_t *name;
__drop_index(parser_t* parser, src_list_t* name)
{
index_t *index;
vdbe_t *v;
@ -2337,7 +2270,7 @@ __drop_index(parser, name)
v = __parser_get_vdbe(parser);
if( v ){
static vdbe_op_t drop_index[] = {
{ OP_Rewind, 0, ADDR(9), 0},
{ OP_Rewind, 0, ADDR(9), 0},
{ OP_String, 0, 0, 0}, /* 1 */
{ OP_MemStore, 1, 1, 0},
{ OP_MemLoad, 1, 0, 0}, /* 3 */
@ -2383,9 +2316,7 @@ __drop_index(parser, name)
* PUBLIC: id_list_t *__id_list_append __P((id_list_t *, token_t *));
*/
id_list_t *
__id_list_append(list, token)
id_list_t *list;
token_t *token;
__id_list_append(id_list_t* list, token_t* token)
{
if (list == 0) {
if (__dbsql_calloc(NULL, 1, sizeof(id_list_t), &list) ==ENOMEM)
@ -2440,10 +2371,7 @@ __id_list_append(list, token)
* PUBLIC: token_t *));
*/
src_list_t *
__src_list_append(list, table, database)
src_list_t *list;
token_t *table;
token_t *database;
__src_list_append(src_list_t* list, token_t* table, token_t* database)
{
if (list == 0) {
if (__dbsql_calloc(NULL, 1, sizeof(src_list_t), &list)==ENOMEM)
@ -2496,12 +2424,10 @@ __src_list_append(list, table, database)
* __src_list_assign_cursors --
* Assign cursors to all tables in a src_list_t.
*
* __src_list_assign_cursors __P((parser_t *, src_list_t *));
* PUBLIC: void __src_list_assign_cursors __P((parser_t *, src_list_t *));
*/
void
__src_list_assign_cursors(parser, list)
parser_t *parser;
src_list_t *list;
__src_list_assign_cursors(parser_t* parser, src_list_t* list)
{
int i;
for (i = 0; i < list->nSrc; i++) {
@ -2518,9 +2444,7 @@ __src_list_assign_cursors(parser, list)
* PUBLIC: void __src_list_add_alias __P((src_list_t *, token_t *));
*/
void
__src_list_add_alias(list, token)
src_list_t *list;
token_t *token;
__src_list_add_alias(src_list_t* list, token_t* token)
{
if (list && list->nSrc > 0) {
int i = list->nSrc - 1;
@ -2537,8 +2461,7 @@ __src_list_add_alias(list, token)
* PUBLIC: void __id_list_delete __P((id_list_t *));
*/
void
__id_list_delete(list)
id_list_t *list;
__id_list_delete(id_list_t* list)
{
int i;
if (list == 0)
@ -2579,8 +2502,7 @@ __id_list_index(list, name)
* PUBLIC: void __src_list_delete __P((src_list_t *));
*/
void
__src_list_delete(list)
src_list_t *list;
__src_list_delete(src_list_t* list)
{
int i;
if (list == 0)
@ -2606,9 +2528,7 @@ __src_list_delete(list)
* PUBLIC: void __dbsql_txn_begin __P((parser_t *, int));
*/
void
__dbsql_txn_begin(parser, on_error)
parser_t *parser;
int on_error;
__dbsql_txn_begin(parser_t* parser, int on_error)
{
DBSQL *dbp;
@ -2638,8 +2558,7 @@ __dbsql_txn_begin(parser, on_error)
* PUBLIC: void __dbsql_txn_commit __P((parser_t *));
*/
void
__dbsql_txn_commit(parser)
parser_t *parser;
__dbsql_txn_commit(parser_t* parser)
{
DBSQL *dbp;
@ -2669,8 +2588,7 @@ __dbsql_txn_commit(parser)
* PUBLIC: void __dbsql_txn_abort __P((parser_t *));
*/
void
__dbsql_txn_abort(parser)
parser_t *parser;
__dbsql_txn_abort(parser_t* parser)
{
DBSQL *dbp;
vdbe_t *v;
@ -2687,7 +2605,7 @@ __dbsql_txn_abort(parser)
if ((dbp->flags & DBSQL_InTrans) == 0) {
__error_msg(parser,
"cannot rollback - no transaction is active");
return;
return;
}
v = __parser_get_vdbe(parser);
if (v) {
@ -2742,10 +2660,7 @@ void __code_verify_schema(parser, idb)
* PUBLIC: void __vdbe_prepare_write __P((parser_t*, int, int));
*/
void
__vdbe_prepare_write(parser, checkpoint, idb)
parser_t *parser;
int checkpoint;
int idb;
__vdbe_prepare_write(parser_t* parser, int checkpoint, int idb)
{
vdbe_t *v;
DBSQL *dbp = parser->db;
@ -2773,15 +2688,14 @@ __vdbe_prepare_write(parser, checkpoint, idb)
* the database. If a statement transaction was started, then emit
* an OP_Commit that will cause the changes to be committed to disk.
* Note that checkpoints are automatically committed at the end of
* a statement. Note also that there can be multiple calls to
* a statement. Note also that there can be multiple calls to
* __vdbe_prepare_write() but there should only be a single
* call to __vdbe_conclude_write() at the conclusion of the statement.
*
* PUBLIC: void __vdbe_conclude_write __P((parser_t *));
*/
void
__vdbe_conclude_write(parser)
parser_t *parser;
__vdbe_conclude_write(parser_t* parser)
{
vdbe_t *v;
DBSQL *dbp = parser->db;
@ -2791,7 +2705,7 @@ __vdbe_conclude_write(parser)
if (v == 0)
return;
if (dbp->flags & DBSQL_InTrans) {
/*
/*
* A BEGIN has executed. Do not commit until we see an
* explicit COMMIT statement.
*/

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_copy.c 7 2007-02-03 13:34:17Z gburd $
*/

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_date.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -29,7 +27,7 @@
*
* All times and dates are managed as Julian Day numbers. The
* dates and times are stored as the number of days since noon
* in Greenwich on November 24, 4714 B.C. according to the Gregorian
* in Greenwich on November 24, 4714, B.C. according to the Gregorian
* calendar system.
*
* 1970-01-01 00:00:00 is JD 2440587.5
@ -43,7 +41,7 @@
* The Gregorian calendar system is used for all dates and times,
* even those that predate the Gregorian calendar. Historians usually
* use the Julian calendar for dates prior to 1582-10-15 and for some
* dates afterwards, depending on locale. Beware of this difference.
* dates afterward, depending on locale. Beware of this difference.
*
* The conversion algorithms are implemented based on descriptions
* in the following text:
@ -61,6 +59,9 @@
#include <ctype.h>
#include <stdlib.h>
#include <time.h>
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#endif
#include "dbsql_int.h"
@ -167,7 +168,7 @@ __convert_str_to_double(date, result)
*
* A missing specifier is not considered an error.
*
* STATIC: int __parse_tz __P((const char *, datetime_t *));
* STATIC: static int __parse_tz __P((const char *, datetime_t *));
*/
static int
__parse_tz(date, dt)
@ -269,8 +270,7 @@ __parse_hh_mm_ss(date, dt)
* STATIC: static void compute_jd __P((datetime_t *));
*/
static void
__compute_jd(dt)
datetime_t *dt;
__compute_jd(datetime_t* dt)
{
int Y, M, D, A, B, X1, X2;
@ -370,7 +370,7 @@ __parse_yyyy_mm_dd(date, dt)
* The following are acceptable forms for the input string:
*
* YYYY-MM-DD HH:MM:SS.FFF +/-HH:MM
* DDDD.DD
* DDDD.DD
* now
*
* In the first form, the +/-HH:MM is always optional. The fractional
@ -419,8 +419,7 @@ __parse_date_or_time(date, dt)
* STATIC: static void __compute_ymd __P((datetime_t *));
*/
static void
__compute_ymd(dt)
datetime_t *dt;
__compute_ymd(datetime_t* dt)
{
int Z, A, B, C, D, E, X1;
if (dt->validYMD)
@ -446,8 +445,7 @@ __compute_ymd(dt)
* STATIC: static void __compute_hms __P((datetime_t *));
*/
static void
__compute_hms(dt)
datetime_t *dt;
__compute_hms(datetime_t* dt)
{
int Z, s;
if (dt->validHMS)
@ -471,8 +469,7 @@ __compute_hms(dt)
* STATIC: static void __compute_ymd_hms __P((datetime_t *));
*/
static void
__compute_ymd_hms(dt)
datetime_t *dt;
__compute_ymd_hms(datetime_t* dt)
{
__compute_ymd(dt);
__compute_hms(dt);
@ -485,8 +482,7 @@ __compute_ymd_hms(dt)
* STATIC: static void __clear_ymd_hms_tz __P((datetime_t *));
*/
static void
__clear_ymd_hms_tz(dt)
datetime_t *dt;
__clear_ymd_hms_tz(datetime_t* dt)
{
dt->validYMD = 0;
dt->validHMS = 0;
@ -501,8 +497,7 @@ __clear_ymd_hms_tz(dt)
* STATIC: static double __localtime_offset __P((datetime_t *));
*/
static double
__localtime_offset(dt)
datetime_t *dt;
__localtime_offset(datetime_t* dt)
{
datetime_t x, y;
time_t t;
@ -1019,8 +1014,7 @@ __strftime_sql_func(context, argc, argv)
* PUBLIC: void __register_datetime_funcs __P((DBSQL *));
*/
void
__register_datetime_funcs(dbp)
DBSQL *dbp;
__register_datetime_funcs(DBSQL* dbp)
{
static struct {
char *name;
@ -1039,8 +1033,8 @@ __register_datetime_funcs(dbp)
int i;
for (i = 0; i < sizeof(funcs) / sizeof(funcs[0]); i++) {
dbp->create_function(dbp, funcs[i].name, funcs[i].args,
DBSQL_UTF8_ENCODED, NULL, funcs[i].func,
dbp->create_function(dbp, funcs[i].name, DBSQL_UTF8_ENCODED,
funcs[i].args, NULL, funcs[i].func,
NULL, NULL);
if (funcs[i].func) {
dbp->func_return_type(dbp, funcs[i].name,

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_delete.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -38,9 +36,7 @@
* PUBLIC: table_t *__src_list_lookup __P((parser_t *, src_list_t *));
*/
table_t *
__src_list_lookup(parser, src)
parser_t *parser;
src_list_t *src;
__src_list_lookup(parser_t* parser, src_list_t* src)
{
table_t *table = 0;
int i;
@ -62,10 +58,7 @@ __src_list_lookup(parser, src)
* PUBLIC: int __is_table_read_only __P((parser_t *, table_t *, int));
*/
int
__is_table_read_only(parser, table, views_ok)
parser_t *parser;
table_t *table;
int views_ok;
__is_table_read_only(parser_t* parser, table_t* table, int views_ok)
{
if (table->readOnly) {
__error_msg(parser, "table %s may not be modified",

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_expr.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -42,11 +40,7 @@
* PUBLIC: expr_t *__expr __P((int, expr_t *, expr_t *, token_t *));
*/
expr_t *
__expr(op, left, right, token)
int op;
expr_t *left;
expr_t *right;
token_t *token;
__expr(int op, expr_t* left, expr_t* right, token_t* token)
{
expr_t *new;
if (__dbsql_calloc(NULL, 1, sizeof(expr_t), &new) == ENOMEM) {
@ -81,10 +75,7 @@ __expr(op, left, right, token)
* PUBLIC: void __expr_span __P((expr_t *, token_t *, token_t *));
*/
void
__expr_span(expr, left, right)
expr_t *expr;
token_t *left;
token_t *right;
__expr_span(expr_t* expr, token_t* left, token_t* right)
{
DBSQL_ASSERT(right != 0);
DBSQL_ASSERT(left != 0);
@ -110,9 +101,7 @@ __expr_span(expr, left, right)
* PUBLIC: expr_t *__expr_function __P((expr_list_t *, token_t *));
*/
expr_t *
__expr_function(list, token)
expr_list_t *list;
token_t *token;
__expr_function(expr_list_t* list, token_t* token)
{
expr_t *new;
if (__dbsql_calloc(NULL, 1, sizeof(expr_t), &new) == ENOMEM) {
@ -140,8 +129,7 @@ __expr_function(list, token)
* PUBLIC: void __expr_delete __P((expr_t *));
*/
void
__expr_delete(p)
expr_t *p;
__expr_delete(expr_t* p)
{
if (p == 0)
return;
@ -171,8 +159,7 @@ __expr_delete(p)
* PUBLIC: expr_t *__expr_dup __P((expr_t *));
*/
expr_t *
__expr_dup(p)
expr_t *p;
__expr_dup(expr_t* p)
{
expr_t *new;
if (p == 0)
@ -201,9 +188,7 @@ __expr_dup(p)
* PUBLIC: void __token_copy __P((token_t *, token_t *));
*/
void
__token_copy(to, from)
token_t *to;
token_t *from;
__token_copy(token_t* to, token_t* from)
{
if (to->dyn)
__dbsql_free(NULL, (char*)to->z);
@ -223,8 +208,7 @@ __token_copy(to, from)
* PUBLIC: expr_list_t *__expr_list_dup __P((expr_list_t *));
*/
expr_list_t *
__expr_list_dup(p)
expr_list_t *p;
__expr_list_dup(expr_list_t* p)
{
expr_list_t *new;
int i;
@ -268,8 +252,7 @@ __expr_list_dup(p)
* PUBLIC: src_list_t *__src_list_dup __P((src_list_t *));
*/
src_list_t *
__src_list_dup(p)
src_list_t *p;
__src_list_dup(src_list_t* p)
{
src_list_t *new;
int i;
@ -304,8 +287,7 @@ __src_list_dup(p)
* PUBLIC: id_list_t *__id_list_dup __P((id_list_t *));
*/
id_list_t *
__id_list_dup(p)
id_list_t *p;
__id_list_dup(id_list_t* p)
{
id_list_t *new;
int i;
@ -332,8 +314,7 @@ __id_list_dup(p)
* PUBLIC: select_t *__select_dup __P((select_t *));
*/
select_t *
__select_dup(p)
select_t *p;
__select_dup(select_t* p)
{
select_t *new;
if (p == 0)
@ -367,10 +348,7 @@ __select_dup(p)
* PUBLIC: token_t *));
*/
expr_list_t *
__expr_list_append(list, expr, name)
expr_list_t *list;
expr_t *expr;
token_t *name;
__expr_list_append(expr_list_t* list, expr_t* expr, token_t* name)
{
if (list == 0) {
if (__dbsql_calloc(NULL, 1, sizeof(expr_list_t),
@ -411,8 +389,7 @@ __expr_list_append(list, expr, name)
* PUBLIC: void __expr_list_delete __P((expr_list_t *));
*/
void
__expr_list_delete(list)
expr_list_t *list;
__expr_list_delete(expr_list_t* list)
{
int i;
if (list == 0)
@ -436,8 +413,7 @@ __expr_list_delete(list)
* PUBLIC: int __expr_is_constant __P((expr_t *));
*/
int
__expr_is_constant(p)
expr_t *p;
__expr_is_constant(expr_t* p)
{
int rc = 0;
@ -496,9 +472,7 @@ __expr_is_constant(p)
* PUBLIC: int __expr_is_integer __P((expr_t *, int *));
*/
int
__expr_is_integer(p, value)
expr_t *p;
int *value;
__expr_is_integer(expr_t* p, int* value)
{
const char *z;
int v, n;
@ -1028,8 +1002,8 @@ int __expr_resolve_ids(parser, slist, elist, expr)
* __get_function_name --
* 'expr' is a node that defines a function of some kind. It might
* be a syntactic function like "count(x)" or it might be a function
* that implements an operator, like "a LIKE b".
* This routine makes 'name' point to the name of the function and
* that implements an operator, like "a LIKE b".
* This routine makes 'name' point to the name of the function and
* 'len' hold the number of characters in the function name.
*
* STATIC: static void __get_function_name __P((expr_t *, const char **,
@ -1074,11 +1048,7 @@ __get_function_name(expr, name, len)
* PUBLIC: int __expr_check __P((parser_t *, expr_t *, int, int *));
*/
int
__expr_check(parser, expr, agg_allowed, agg)
parser_t *parser;
expr_t *expr;
int agg_allowed;
int *agg;
__expr_check(parser_t* parser, expr_t* expr, int agg_allowed, int* agg)
{
int nerr, i, n, no_such_func, is_type_of, wrong_num_args, is_agg, nid;
const char *id;
@ -1109,7 +1079,7 @@ __expr_check(parser, expr, agg_allowed, agg)
def = __find_function(parser->db, id, nid, -1, 0);
if (def == 0) {
if (n == 1 && nid == 6 &&
strncasecmp(id, "typeof",6) == 0) {
strncasecmp(id, "typeof",6) == 0) {
is_type_of = 1;
} else {
no_such_func = 1;
@ -1133,7 +1103,7 @@ __expr_check(parser, expr, agg_allowed, agg)
parser->nErr++;
nerr++;
} else if (wrong_num_args) {
__str_nappend(&parser->zErrMsg,
__str_nappend(&parser->zErrMsg,
"wrong number of arguments to function ",
-1, id, nid, "()", 2, NULL);
parser->nErr++;
@ -1161,8 +1131,7 @@ __expr_check(parser, expr, agg_allowed, agg)
}
} else if (def->dataType >= 0) {
if (def->dataType < n) {
expr->dataType =
__expr_type(expr->pList->a[def->dataType].pExpr);
expr->dataType = __expr_type(expr->pList->a[def->dataType].pExpr);
} else {
expr->dataType = DBSQL_SO_NUM;
}
@ -1213,8 +1182,7 @@ __expr_check(parser, expr, agg_allowed, agg)
* PUBLIC: int __expr_type __P((expr_t *));
*/
int
__expr_type(p)
expr_t *p;
__expr_type(expr_t* p)
{
int i;
expr_list_t *list;
@ -1307,9 +1275,7 @@ __expr_type(p)
* PUBLIC: void __expr_code __P((parser_t *, expr_t *));
*/
void
__expr_code(parser, expr)
parser_t *parser;
expr_t *expr;
__expr_code(parser_t* parser, expr_t* expr)
{
vdbe_t *v = parser->pVdbe;
int i, op, dest, nexpr, nid, addr, expr_end_lable, jump_inst;
@ -1565,11 +1531,7 @@ __expr_code(parser, expr)
* PUBILC: void __expr_if_true __P((parser_t *, expr_t *, int, int));
*/
void
__expr_if_true(parser, expr, dest, jump_if_null)
parser_t *parser;
expr_t *expr;
int dest;
int jump_if_null;
__expr_if_true(parser_t* parser, expr_t* expr, int dest, int jump_if_null)
{
vdbe_t *v = parser->pVdbe;
int d2, addr, op = 0;
@ -1660,11 +1622,7 @@ __expr_if_true(parser, expr, dest, jump_if_null)
* PUBLIC: void __expr_if_false __P((parser_t *, expr_t *, int, int));
*/
void
__expr_if_false(parser, expr, dest, jump_if_null)
parser_t *parser;
expr_t *expr;
int dest;
int jump_if_null;
__expr_if_false(parser_t* parser, expr_t* expr, int dest, int jump_if_null)
{
vdbe_t *v = parser->pVdbe;
int addr, d2, op = 0;
@ -1762,9 +1720,7 @@ __expr_if_false(parser, expr, dest, jump_if_null)
* PUBLIC: int __expr_compare __P((expr_t *, expr_t *));
*/
int
__expr_compare(a, b)
expr_t *a;
expr_t *b;
__expr_compare(expr_t* a, expr_t* b)
{
int i;
if (a == 0) {
@ -1816,8 +1772,7 @@ __expr_compare(a, b)
* STATIC: static int __append_agg_info __P((parser_t *));
*/
static int
__append_agg_info(parser)
parser_t *parser;
__append_agg_info(parser_t* parser)
{
agg_expr_t *agg;
if ((parser->nAgg & 0x7) == 0) {
@ -1842,9 +1797,7 @@ __append_agg_info(parser)
* PUBLIC: int __expr_analyze_aggregates __P((parser_t *, expr_t *));
*/
int
__expr_analyze_aggregates(parser, expr)
parser_t *parser;
expr_t *expr;
__expr_analyze_aggregates(parser_t* parser, expr_t* expr)
{
int i, n, nexpr, nerr = 0;
agg_expr_t *agg;

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_insert.c 7 2007-02-03 13:34:17Z gburd $
*/
/*

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_pragma.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -39,8 +37,7 @@
* STATIC: static int __get_boolean __P((char *));
*/
static int
__get_boolean(z)
char *z;
__get_boolean(char* z)
{
static char *true[] = { "yes", "on", "true" };
int i;
@ -70,8 +67,7 @@ __get_boolean(z)
* STATIC: static int __get_safety_level __P((char *));
*/
static int
__get_safety_level(z)
char *z;
__get_safety_level(char* z)
{
static const struct {
const char *word;
@ -113,11 +109,7 @@ __get_safety_level(z)
* PUBLIC: void __pragma __P((parser_t *, token_t *, token_t *, int));
*/
void
__pragma(parser, left, right, minus_p)
parser_t *parser;
token_t *left;
token_t *right;
int minus_p;
__pragma(parser_t* parser, token_t* left, token_t* right, int minus_p)
{
char *left_name = 0;
char *right_name = 0;

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_select.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -108,11 +106,7 @@ __select_new(result_cols, from_clause, where_clause, groupby_clause,
* PUBLIC: int __join_type __P((parser_t *, token_t *, token_t *, token_t *));
*/
int
__join_type(parser, a, b, c)
parser_t *parser;
token_t *a;
token_t *b;
token_t *c;
__join_type(parser_t* parser, token_t* a, token_t* b, token_t* c)
{
int jointype = 0;
token_t *ap_all[3];
@ -258,8 +252,7 @@ __add_where_term(col, table1, table2, expr)
* STATIC: static void __set_join_expr __P((expr_t *));
*/
static void
__set_join_expr(p)
expr_t *p;
__set_join_expr(expr_t* p)
{
while (p) {
ExprSetProperty(p, EP_FromJoin);
@ -279,9 +272,7 @@ __set_join_expr(p)
* STATIC: static int __process_join __P((parser_t *, select_t *));
*/
static int
__process_join(parser, select)
parser_t *parser;
select_t *select;
__process_join(parser_t* parser, select_t* select)
{
int i, j;
src_list_t *src;
@ -382,8 +373,7 @@ __process_join(parser, select)
* PUBLIC: void __select_delete __P((select_t *));
*/
void
__select_delete(select)
select_t *select;
__select_delete(select_t* select)
{
if (select == 0)
return;
@ -405,8 +395,7 @@ __select_delete(select)
* STATIC: static void __aggregage_info_reset __P((parser_t *));
*/
static void
__aggregate_info_reset(parser)
parser_t *parser;
__aggregate_info_reset(parser_t* parser)
{
__dbsql_free(parser->db, parser->aAgg);
parser->aAgg = 0;
@ -423,10 +412,7 @@ __aggregate_info_reset(parser)
* STATIC: expr_list_t *));
*/
static void
__push_onto_sorter(parser, v, orderby_clause)
parser_t *parser;
vdbe_t *v;
expr_list_t *orderby_clause;
__push_onto_sorter(parser_t* parser, vdbe_t* v, expr_list_t* orderby_clause)
{
int i, order, type, c;
char *sort_order;
@ -472,9 +458,7 @@ __push_onto_sorter(parser, v, orderby_clause)
* PUBLIC: void __add_key_type __P((vdbe_t *, expr_list_t *));
*/
void
__add_key_type(v, elist)
vdbe_t *v;
expr_list_t *elist;
__add_key_type(vdbe_t* v, expr_list_t* elist)
{
int i;
int col = elist->nExpr;
@ -721,12 +705,7 @@ __select_inner_loop(parser, select, elist, src_table, num_cols, orderby_clause,
* param Optional parameter associated with dest
*/
static void
__generate_sort_tail(select, v, num_cols, dest, param)
select_t *select;
vdbe_t *v;
int num_cols;
int dest;
int param;
__generate_sort_tail(select_t* select, vdbe_t* v, int num_cols, int dest, int param)
{
int i, addr;
int end = __vdbe_make_label(v);
@ -805,10 +784,7 @@ __generate_sort_tail(select, v, num_cols, dest, param)
* elist Expressions defining the result set
*/
static void
__generate_column_types(parser, tables, elist)
parser_t *parser;
src_list_t *tables;
expr_list_t *elist;
__generate_column_types(parser_t* parser, src_list_t* tables, expr_list_t* elist)
{
int i, j, col;
expr_t *p;
@ -867,10 +843,7 @@ __generate_column_types(parser, tables, elist)
* elist Expressions defining the result set
*/
static void
__generate_column_names(parser, tables, elist)
parser_t *parser;
src_list_t *tables;
expr_list_t *elist;
__generate_column_names(parser_t* parser, src_list_t* tables, expr_list_t* elist)
{
int i, j, show_full_names, icol, addr;
char *type, *name, *col, *tab;
@ -950,8 +923,7 @@ __generate_column_names(parser, tables, elist)
* STATIC: static const char *__select_op_name __P((int));
*/
static const char *
__select_op_name(id)
int id;
__select_op_name(int id)
{
char *z;
switch(id) {
@ -989,9 +961,7 @@ __select_op_name(id)
* STATIC: static int __file_in_column_list __P((parser_t *, select_t *));
*/
static int
__fill_in_column_list(parser, select)
parser_t *parser;
select_t *select;
__fill_in_column_list(parser_t* parser, select_t* select)
{
int i, j, k, rc;
src_list_t *tables;
@ -1247,8 +1217,7 @@ __fill_in_column_list(parser, select)
* PUBLIC: void __select_unbind __P((select_t *));
*/
void
__select_unbind(select)
select_t *select;
__select_unbind(select_t* select)
{
int i;
table_t *table;
@ -1390,8 +1359,7 @@ __match_orderby_to_column(parser, select, orderby_clause, table_idx,
* PUBLIC: vdbe_t *__parser_get_vdbe __P((parser_t *));
*/
vdbe_t *
__parser_get_vdbe(parser)
parser_t *parser;
__parser_get_vdbe(parser_t* parser)
{
vdbe_t *v = parser->pVdbe;
if (v == 0) {
@ -1433,9 +1401,7 @@ __parser_get_vdbe(parser)
* STATIC: expr_list_t *));
*/
static void
__multi_select_sort_order(select, orderby_clause)
select_t *select;
expr_list_t *orderby_clause;
__multi_select_sort_order(select_t* select, expr_list_t* orderby_clause)
{
int i;
expr_list_t *elist;
@ -1484,9 +1450,7 @@ __multi_select_sort_order(select, orderby_clause)
* STATIC: static void __compute_limit_registers __P((parser_t *, select_t *));
*/
static void
__compute_limit_registers(parser, select)
parser_t *parser;
select_t *select;
__compute_limit_registers(parser_t* parser, select_t* select)
{
int mem;
vdbe_t *v;
@ -1555,11 +1519,7 @@ __compute_limit_registers(parser, select)
*
*/
static int
__multi_select(parser, select, dest, param)
parser_t *parser;
select_t *select;
int dest;
int param;
__multi_select(parser_t* parser, select_t* select, int dest, int param)
{
int tab1, tab2;
int cont, brk, start;
@ -1669,7 +1629,6 @@ __multi_select(parser, select, dest, param)
rc = __select(parser, prior, prior_op, union_tab, 0, 0, 0);
if (rc)
return rc;
/*
* Code the current SELECT statement.
*/
@ -1692,7 +1651,6 @@ __multi_select(parser, select, dest, param)
select->nOffset = offset;
if (rc)
return rc;
/*
* Convert the data in the temporary table into whatever form
* it is that we currently need.
@ -1753,7 +1711,6 @@ __multi_select(parser, select, dest, param)
rc = __select(parser, prior, SRT_Union, tab1, 0, 0, 0);
if (rc)
return rc;
/*
* Code the current SELECT into temporary table "tab2".
*/
@ -1770,7 +1727,6 @@ __multi_select(parser, select, dest, param)
select->nOffset = offset;
if (rc)
return rc;
/*
* Generate code to take the intersection of the two temporary
* tables.
@ -1840,13 +1796,10 @@ static void __subst_expr_list(expr_list_t*,int,expr_list_t*);
* changes to pExpr so that it refers directly to the source table
* of the subquery rather the result set of the subquery.
*
* STATIC: void __subst_expr __P((expr_t *, int, expr_list_t *));
* STATIC: static void __subst_expr __P((expr_t *, int, expr_list_t *));
*/
static void
__subst_expr(expr, table, elist)
expr_t *expr;
int table;
expr_list_t *elist;
__subst_expr(expr_t* expr, int table, expr_list_t* elist)
{
expr_t *new;
@ -1888,10 +1841,7 @@ __subst_expr(expr, table, elist)
* STATIC: expr_list_t *));
*/
static void
__subst_expr_list(list, table, elist)
expr_list_t *list;
int table;
expr_list_t *elist;
__subst_expr_list(expr_list_t* list, int table, expr_list_t* elist)
{
int i;
if (list == 0)
@ -1982,12 +1932,7 @@ __subst_expr_list(list, table, elist)
* subquery_agg_p True if the subquery uses aggregate functions
*/
static int
__flatten_subquery(parser, select, from, agg_p, subquery_agg_p)
parser_t *parser;
select_t *select;
int from;
int agg_p;
int subquery_agg_p;
__flatten_subquery(parser_t* parser, select_t* select, int from, int agg_p, int subquery_agg_p)
{
select_t *sub_select; /* The inner query or "subquery" */
src_list_t *outer_from_clause; /* The FROM clause of the outer query */
@ -2230,11 +2175,7 @@ __flatten_subquery(parser, select, from, agg_p, subquery_agg_p)
* STATIC: static int __min_max_query __P((parser_t *, select_t *, int, int));
*/
static int
__min_max_query(parser, select, dest, param)
parser_t *parser;
select_t *select;
int dest;
int param;
__min_max_query(parser_t* parser, select_t* select, int dest, int param)
{
expr_t *expr;
int col;
@ -2909,10 +2850,7 @@ int __select(parser, select, dest, param, parent, parent_tab, parent_agg_p)
* PUBLIC: table_t *__select_result_set __P((parser_t *, char *, select_t *));
*/
table_t *
__select_result_set(parser, tab_name, select)
parser_t *parser;
char *tab_name;
select_t *select;
__select_result_set(parser_t* parser, char* tab_name, select_t* select)
{
int i, j, n, cnt;
table_t *table;

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_trigger.c 7 2007-02-03 13:34:17Z gburd $
*/
#include "dbsql_config.h"
@ -30,8 +28,7 @@
* PUBLIC: void __vdbe_delete_trigger_step __P((trigger_step_t *));
*/
void
__vdbe_delete_trigger_step(ts)
trigger_step_t *ts;
__vdbe_delete_trigger_step(trigger_step_t* ts)
{
while(ts) {
trigger_step_t * tmp = ts;
@ -223,10 +220,7 @@ __begin_trigger(parser, trigger, tr_tm, op, columns, tab_name, foreach,
* CREATE TRIGGER
*/
void
__finish_trigger(parser, steplist, all)
parser_t *parser;
trigger_step_t *steplist;
token_t *all;
__finish_trigger(parser_t* parser, trigger_step_t* steplist, token_t* all)
{
ref_normalizer_ctx_t normctx;
trigger_t *nt = 0; /* The trigger whose construction is finishing up */
@ -318,8 +312,7 @@ __finish_trigger(parser, steplist, all)
* STATIC: static void __persist_trigger_step __P((trigger_step_t *));
*/
static void
__persist_trigger_step(ts)
trigger_step_t *ts;
__persist_trigger_step(trigger_step_t* ts)
{
if (ts->target.z) {
__dbsql_strndup(NULL, ts->target.z, &ts->target.z, ts->target.n);
@ -358,8 +351,7 @@ __persist_trigger_step(ts)
* PUBLIC: trigger_step_t * __trigger_select_step __P((select_t *));
*/
trigger_step_t *
__trigger_select_step(select)
select_t *select;
__trigger_select_step(select_t* select)
{
trigger_step_t *ts;
@ -394,12 +386,7 @@ __trigger_select_step(select)
* etc.)
*/
trigger_step_t *
__trigger_insert_step(tab_name, column, elist, select, orconf)
token_t *tab_name;
id_list_t *column;
expr_list_t *elist;
select_t *select;
int orconf;
__trigger_insert_step(token_t* tab_name, id_list_t* column, expr_list_t* elist, select_t* select, int orconf)
{
trigger_step_t *ts;
@ -436,11 +423,7 @@ __trigger_insert_step(tab_name, column, elist, select, orconf)
* etc)
*/
trigger_step_t *
__trigger_update_step(tab_name, elist, where_clause, orconf)
token_t *tab_name;
expr_list_t *elist;
expr_t *where_clause;
int orconf;
__trigger_update_step(token_t* tab_name, expr_list_t* elist, expr_t* where_clause, int orconf)
{
trigger_step_t *ts;
@ -466,9 +449,7 @@ __trigger_update_step(tab_name, elist, where_clause, orconf)
* PUBLIC: trigger_step_t *__trigger_delete_step __P((token_t *, expr_t *));
*/
trigger_step_t *
__trigger_delete_step(tab_name, where_clause)
token_t *tab_name;
expr_t *where_clause;
__trigger_delete_step(token_t* tab_name, expr_t* where_clause)
{
trigger_step_t *ts;
@ -491,8 +472,7 @@ __trigger_delete_step(tab_name, where_clause)
* PUBLIC: void __vdbe_delete_trigger __P((trigger_t *));
*/
void
__vdbe_delete_trigger(trigger)
trigger_t *trigger;
__vdbe_delete_trigger(trigger_t* trigger)
{
if (trigger == 0)
return;
@ -523,9 +503,7 @@ __vdbe_delete_trigger(trigger)
* PUBLIC: void __drop_trigger __P((parser_t *, src_list_t *));
*/
void
__drop_trigger(parser, trig_list)
parser_t *parser;
src_list_t *trig_list;
__drop_trigger(parser_t* parser, src_list_t* trig_list)
{
int i;
trigger_t *trigger;
@ -569,10 +547,7 @@ __drop_trigger(parser, trig_list)
* PUBLIC: void __drop_trigger_ptr __P((parser_t *, trigger_t *, int));
*/
void
__drop_trigger_ptr(parser, trigger, nested)
parser_t *parser;
trigger_t *trigger;
int nested;
__drop_trigger_ptr(parser_t* parser, trigger_t* trigger, int nested)
{
table_t *table;
vdbe_t *v;
@ -671,9 +646,7 @@ __drop_trigger_ptr(parser, trigger, nested)
* STATIC: static int __check_column_overlap __P((id_list_t *, expr_list_t *));
*/
static int
__check_column_overlap(id_list, elist)
id_list_t *id_list;
expr_list_t *elist;
__check_column_overlap(id_list_t* id_list, expr_list_t* elist)
{
int e;
if (!id_list || !elist)
@ -794,10 +767,7 @@ static src_list_t *targetSrcList(parser, step)
* orconfin Conflict algorithm. (OE_Abort, etc)
*/
static int
__code_trigger_program(parser, steplist, orconfin)
parser_t *parser;
trigger_step_t *steplist;
int orconfin;
__code_trigger_program(parser_t* parser, trigger_step_t* steplist, int orconfin)
{
int orconf;
trigger_step_t * ts = steplist;
@ -871,7 +841,7 @@ __code_trigger_program(parser, steplist, orconfin)
* pointing at a row containing values to be substituted for old.*
* expressions in the trigger program(s).
*
* PUBlIC: int __code_row_trigger __P(());
* PUBLIC: int __code_row_trigger __P(());
*
* parser Parser context
* op One of TK_UPDATE, TK_INSERT, TK_DELETE

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_update.c 7 2007-02-03 13:34:17Z gburd $
*/
/*

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_vacuum.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -38,9 +36,7 @@
* PUBLIC: void __vacuum __P((parser_t *, token_t *));
*/
void
__vacuum(parser, tab_name)
parser_t *parser;
token_t *tab_name;
__vacuum(parser_t* parser, token_t* tab_name)
{
vdbe_t *v = __parser_get_vdbe(parser);
__vdbe_add_op(v, OP_Vacuum, 0, 0);
@ -55,9 +51,7 @@ __vacuum(parser, tab_name)
* PUBLIC: int __execute_vacuum __P((char **, DBSQL *));
*/
int
__execute_vacuum(err_msgs, dbp)
char **err_msgs;
DBSQL *dbp;
__execute_vacuum(char* *err_msgs, DBSQL* dbp)
{
return DBSQL_SUCCESS; /* NOTE: When DB implements compaction (someday)
then this will be the place to invoke the
@ -74,9 +68,7 @@ __execute_vacuum(err_msgs, dbp)
* PUBLIC: int __execute_vacuum __P((char **, DBSQL *));
*/
int
__execute_vacuum(err_msgs, dbp)
char **err_msgs;
DBSQL *dbp;
__execute_vacuum(char* *err_msgs, DBSQL* dbp)
{
return DBSQL_SUCCESS;
}

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: cg_where.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -33,12 +31,12 @@
* clause subexpression is separated from the others by an AND operator.
*/
typedef struct expr_info {
expr_t *p; /* Pointer to the subexpression */
u_int8_t indexable; /* True if this subexprssion is usable
by an index */
short int idxLeft; /* p->pLeft is a column in this table
number. -1 if p->pLeft is not the
column of any table */
expr_t *p; /* Pointer to the subexpression */
u_int8_t indexable; /* True if this subexprssion is usable
by an index */
short int idxLeft; /* p->pLeft is a column in this table
number. -1 if p->pLeft is not the
column of any table */
short int idxRight; /* p->pRight is a column in this table
number. -1 if p->pRight is not the
column of any table */
@ -73,10 +71,7 @@ typedef struct expr_mask_set {
* STATIC: static int __expr_split __P((int, expr_info_t *, expr_t *));
*/
static int
__expr_split(num_slot, slot, expr)
int num_slot;
expr_info_t *slot;
expr_t *expr;
__expr_split(int num_slot, expr_info_t* slot, expr_t* expr)
{
int cnt = 0;
if (expr == 0 || num_slot < 1)
@ -103,9 +98,7 @@ __expr_split(num_slot, slot, expr)
* STATIC: static int __get_cursor_bitmask __P((expr_mask_set_t *, int));
*/
static int
__get_cursor_bitmask(mask_set, cursor)
expr_mask_set_t *mask_set;
int cursor;
__get_cursor_bitmask(expr_mask_set_t* mask_set, int cursor)
{
int i;
for (i = 0; i < mask_set->n; i++) {
@ -142,9 +135,7 @@ __get_cursor_bitmask(mask_set, cursor)
* STATIC: static int __expr_table_usage __P((expr_mask_set_t *, expr_t *));
*/
static int
__expr_table_usage(mask_set, p)
expr_mask_set_t *mask_set;
expr_t *p;
__expr_table_usage(expr_mask_set_t* mask_set, expr_t* p)
{
int i;
unsigned int mask = 0;
@ -177,8 +168,7 @@ __expr_table_usage(mask_set, p)
* STATIC: static int __allowed_op __P((int));
*/
static int
__allowed_op(op)
int op;
__allowed_op(int op)
{
switch(op) {
case TK_LT: /* FALLTHROUGH */
@ -203,9 +193,7 @@ __allowed_op(op)
* STATIC: static void expr_analyze __P((expr_mask_set_t *, expr_info_t *));
*/
static void
__expr_analyze(mask_set, info)
expr_mask_set_t *mask_set;
expr_info_t *info;
__expr_analyze(expr_mask_set_t* mask_set, expr_info_t* info)
{
expr_t *expr = info->p;
info->prereqLeft = __expr_table_usage(mask_set, expr->pLeft);
@ -1393,8 +1381,7 @@ where_info_t *__where_begin(parser, tab_list, where_clause, push_key_p,
* PUBLIC: void __where_end __P((where_info_t *));
*/
void
__where_end(winfo)
where_info_t *winfo;
__where_end(where_info_t* winfo)
{
int i, addr;
where_level_t *level;

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: getopt.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
* Copyright (c) 1990-2004

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: memcmp.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
* Copyright (c) 1990-2004

View file

@ -116,8 +116,7 @@
*/
#ifndef HAVE_SRAND48_R
void
__rng_seed(buf)
char *buf;
__rng_seed(char* buf)
{
u_int32_t pid;
double jt;

View file

@ -48,8 +48,6 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: strcasecmp.c 7 2007-02-03 13:34:17Z gburd $
*/
#include "dbsql_config.h"

View file

@ -48,8 +48,6 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: strdup.c 7 2007-02-03 13:34:17Z gburd $
*/
#include "dbsql_config.h"

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: xvprintf.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -128,9 +126,7 @@ static et_info_t fmtinfo[] = {
* always returned.
*/
static int
et_getdigit(val, cnt)
long_double_t *val;
int *cnt;
et_getdigit(long_double_t* val, int* cnt)
{
int digit;
long_double_t d;
@ -759,10 +755,7 @@ __et_printf(dbp, func, arg, fmt, ap)
* STATIC: static void mout __P((void *, char *, int));
*/
static void
__mout(arg, zNewText, nNewChar)
void *arg;
char *zNewText;
int nNewChar;
__mout(void* arg, char* zNewText, int nNewChar)
{
xvprintf_t *pM = (xvprintf_t*)arg;
if (pM->len + nNewChar + 1 > pM->amt) {

View file

@ -16,12 +16,14 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: dbsql_alloc.c 7 2007-02-03 13:34:17Z gburd $
*/
#include "dbsql.h"
#include "dbsql_config.h"
#include "dbsql_int.h"
#include "db_int.h"
#include <string.h>
/*
* __dbsql_umalloc --
@ -31,10 +33,7 @@
* PUBLIC: int __dbsql_umalloc __P((DBSQL *, size_t, void *));
*/
int
__dbsql_umalloc(dbp, size, storep)
DBSQL *dbp;
size_t size;
void *storep;
__dbsql_umalloc(DBSQL* dbp, size_t size, void* storep)
{
return (__os_umalloc((dbp ? dbp->dbenv : NULL), size, storep));
}
@ -46,10 +45,7 @@ __dbsql_umalloc(dbp, size, storep)
* PUBLIC: int __dbsql_urealloc __P((DBSQL *, size_t, void *));
*/
int
__dbsql_urealloc(dbp, size, storep)
DBSQL *dbp;
size_t size;
void *storep;
__dbsql_urealloc(DBSQL* dbp, size_t size, void* storep)
{
return (__os_urealloc((dbp ? dbp->dbenv : NULL), size, storep));
}
@ -61,9 +57,7 @@ __dbsql_urealloc(dbp, size, storep)
* PUBLIC: void __dbsql_ufree __P((DBSQL *, void *));
*/
void
__dbsql_ufree(dbp, ptr)
DBSQL *dbp;
void *ptr;
__dbsql_ufree(DBSQL* dbp, void* ptr)
{
__os_ufree((dbp ? dbp->dbenv : NULL), ptr);
}
@ -139,10 +133,7 @@ __dbsql_calloc(dbp, num, size, storep)
* PUBLIC: int __dbsql_malloc __P((DBSQL *, size_t, void *));
*/
int
__dbsql_malloc(dbp, size, storep)
DBSQL *dbp;
size_t size;
void *storep;
__dbsql_malloc(DBSQL* dbp, size_t size, void* storep)
{
return (__os_malloc((dbp ? dbp->dbenv : NULL), size, storep));
}
@ -154,10 +145,7 @@ __dbsql_malloc(dbp, size, storep)
* PUBLIC: int __dbsql_realloc __P((DBSQL *, size_t, void *));
*/
int
__dbsql_realloc(dbp, size, storep)
DBSQL *dbp;
size_t size;
void *storep;
__dbsql_realloc(DBSQL* dbp, size_t size, void* storep)
{
return (__os_realloc((dbp ? dbp->dbenv : NULL), size, storep));
}
@ -169,9 +157,7 @@ __dbsql_realloc(dbp, size, storep)
* PUBLIC: void __dbsql_free __P((DBSQL *, void *));
*/
void
__dbsql_free(dbp, ptr)
DBSQL *dbp;
void *ptr;
__dbsql_free(DBSQL* dbp, void* ptr)
{
__os_free((dbp ? dbp->dbenv : NULL), ptr);
}

View file

@ -16,13 +16,13 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: dbsql_atof.c 7 2007-02-03 13:34:17Z gburd $
*/
#include "dbsql_config.h"
#include "dbsql_int.h"
#include <ctype.h>
/*
* __dbsql_atof --
* The string z[] is an ascii representation of a real number.

View file

@ -16,13 +16,13 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: dbsql_atoi.c 7 2007-02-03 13:34:17Z gburd $
*/
#include "dbsql_config.h"
#include "dbsql_int.h"
#include <ctype.h>
/*
* __dbsql_atoi --
* Return TRUE if 'str' is a 32-bit signed integer and write

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: dbsql_err.c 7 2007-02-03 13:34:17Z gburd $
*/
#include "dbsql_config.h"
@ -65,8 +63,7 @@ __dbsql_assert(failedexpr, file, line)
* PUBLIC: int __dbsql_panic_msg __P((DBSQL *));
*/
int
__dbsql_panic_msg(dbp)
DBSQL *dbp;
__dbsql_panic_msg(DBSQL* dbp)
{
__dbsql_err(dbp, "PANIC: fatal database error detected; run recovery");
@ -83,9 +80,7 @@ __dbsql_panic_msg(dbp)
* PUBLIC: int __dbsql_panic __P((DBSQL *, int));
*/
int
__dbsql_panic(dbp, errval)
DBSQL *dbp;
int errval;
__dbsql_panic(DBSQL* dbp, int errval)
{
if (dbp != NULL) {
PANIC_SET(dbp, 1);
@ -122,8 +117,7 @@ __dbsql_panic(dbp, errval)
* EXTERN: char *dbsql_strerror __P((int));
*/
char *
dbsql_strerror(error)
int error;
dbsql_strerror(int error)
{
char *p;
@ -282,8 +276,8 @@ __dbsql_errcall(dbp, error, error_set, fmt, ap)
* are pretty rare anymore.
*/
if ((size_t)(p - errbuf) > sizeof(errbuf)) {
write(
STDERR_FILENO, OVERFLOW_ERROR, sizeof(OVERFLOW_ERROR) - 1);
IGNORE_RESULT(write(
STDERR_FILENO, OVERFLOW_ERROR, sizeof(OVERFLOW_ERROR) - 1));
abort();
/* NOTREACHED */
}

101
src/common/dbsql_fop.c Normal file
View file

@ -0,0 +1,101 @@
/*-
* DBSQL - A SQL database engine.
*
* Copyright (C) 2007-2008 The DBSQL Group, Inc. - All rights reserved.
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* There are special exceptions to the terms and conditions of the GPL as it
* is applied to this software. View the full text of the exception in file
* LICENSE_EXCEPTIONS in the directory of this software distribution.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
#include "dbsql_config.h"
#include "dbsql_int.h"
#include "db_int.h"
#include <sys/stat.h>
/*
* __dbsql_exists --
* Returns if file exists using the __os_exists call of DB.
*
* PUBLIC: int __dbsql_exists __P((DBSQL *, const char *, int *));
*/
int
__dbsql_exists(dbp, path, isdirp)
DBSQL *dbp;
const char *path;
int *isdirp;
{
return (__os_exists((dbp ? dbp->dbenv : NULL), path, isdirp));
}
/*
* __dbsql_mkdir --
* Create a directory using the __os_mkdir call of DB.
*
* PUBLIC: int __dbsql_mkdir __P((DBSQL *, const char *, int));
*/
int
__dbsql_mkdir(dbp, path, mode)
DBSQL *dbp;
const char *path;
int mode;
{
return (__os_mkdir((dbp ? dbp->dbenv : NULL), path, mode));
}
/*
* __dbsql_omode --
* Convert a file mode from a string to an int.
*
* PUBLIC: int __dbsql_omode __P((DBSQL *, const char *));
*/
int
__dbsql_omode(dbp, mode)
DBSQL *dbp;
const char *mode;
{
u_int t;
int ret;
#define __SETMODE(offset, valid_ch, mask) { \
if (mode[offset] == (valid_ch)) \
t |= (mask); \
else if (mode[offset] != '-') \
goto format_err; \
}
t = 0;
__SETMODE(0, 'r', S_IRUSR);
__SETMODE(1, 'w', S_IWUSR);
__SETMODE(2, 'x', S_IXUSR);
__SETMODE(3, 'r', S_IRGRP);
__SETMODE(4, 'w', S_IWGRP);
__SETMODE(5, 'x', S_IXGRP);
__SETMODE(6, 'r', S_IROTH);
__SETMODE(7, 'w', S_IWOTH);
__SETMODE(8, 'x', S_IXOTH);
if (mode[9] != '\0' || t == 0) {
/*
* We disallow modes of 0 -- we use 0 to decide the application
* never configured intermediate directory permissions, and we
* shouldn't create intermediate directories. Besides, setting
* the permissions to 0 makes no sense.
*/
format_err: __dbsql_err(dbp, "illegal mode \"%s\"", mode);
return (EINVAL);
}
return t;
}

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: hash.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
* Copyright (c) 1990-2004
@ -118,10 +116,7 @@
* PUBLIC: void __hash_init __P((hash_t *, int, int));
*/
void
__hash_init(this, class, copy_key_p)
hash_t *this;
int class;
int copy_key_p;
__hash_init(hash_t* this, int class, int copy_key_p)
{
DBSQL_ASSERT(this != 0);
DBSQL_ASSERT(class >= DBSQL_HASH_INT && class <= DBSQL_HASH_BINARY);
@ -143,8 +138,7 @@ __hash_init(this, class, copy_key_p)
* PUBLIC: void __hash_clear __P((hash_t *));
*/
void
__hash_clear(this)
hash_t *this;
__hash_clear(hash_t* this)
{
hash_ele_t *elem;
DBSQL_ASSERT(this != 0);
@ -323,9 +317,7 @@ static int
* STATIC: static void __rehash __P((hash_t *, int));
*/
static void
__rehash(this, new_size)
hash_t *this;
int new_size;
__rehash(hash_t* this, int new_size)
{
struct _ht *new_ht; /* The new hash table */
hash_ele_t *elem, *next_elem; /* For looping over existing elements */

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: str.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
* Copyright (c) 1990-2004
@ -56,7 +54,7 @@
*/
/*
* Copyright (c) 1990, 1993, 1994, 1995
*The Regents of the University of California. All rights reserved.
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -84,19 +82,22 @@
*/
/*
* Copyright (c) 1995, 1996
*The President and Fellows of Harvard University. All rights reserved.
* The President and Fellows of Harvard University. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions
* 2. Redistributions
*/
#include "dbsql_config.h"
#include "dbsql_int.h"
#include <ctype.h>
unsigned char __str_upper_to_lower[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
@ -166,9 +167,9 @@ __str_append(result, fmt, va_alist)
/*
* __str_nappend --
* Works like __str_append, but each string is now followed by
* a length integer which specifies how much of the source string
* to copy (in bytes). -1 means use the whole string. The 1st
* argument must either be NULL or point to memory obtained from
* a length integer which specifies how much of the source string
* to copy (in bytes). -1 means use the whole string. The 1st
* argument must either be NULL or point to memory obtained from
* __dbsql_calloc().
*
* PUBLIC: void __str_nappend __P((char **, ...));
@ -186,7 +187,7 @@ __str_nappend(result, va_alist)
size_t len;
const char *tmp;
char *r;
int n;
unsigned long n;
if (result == 0)
return;
@ -221,16 +222,15 @@ __str_nappend(result, va_alist)
* the quote characters. The conversion is done in-place. If the
* input does not begin with a quote character, then this routine
* is a no-op. Quotes can be of the form "'a-b-c'" or the MS-Access style
* brackets around identifers such as: "[a-b-c]". In both cases the
* brackets around identifiers such as: "[a-b-c]". In both cases the
* result is "a-b-c".
*
* PUBLIC: void __str_unquote __P((char *));
*/
void
__str_unquote(z)
char *z;
__str_unquote(char* z)
{
int quote;
char quote;
int i, j;
if (z == NULL)
@ -261,22 +261,21 @@ __str_unquote(z)
* __str_urealloc --
* Make a duplicate of a string into memory obtained from
* __dbsql_umalloc() Free the original string using __dbsql_free().
* This routine is called on all strings that are passed outside of
* This routine is called on all strings that are passed outside
* the library. That way clients can free the string using
* __dbsql_ufree() rather than having to call __dbsql_free().
*
* PUBLIC: int __str_urealloc __P((char **));
*/
int
__str_urealloc(pz)
char **pz;
__str_urealloc(char* *pz)
{
int rc = DBSQL_SUCCESS;
char *new;
if (pz == 0 || *pz == NULL)
return;
return rc;
if (__dbsql_umalloc(NULL, strlen(*pz) + 1, &new) == ENOMEM) {
rc = ENOMEM;
__dbsql_free(NULL, *pz);
@ -297,8 +296,7 @@ __str_urealloc(pz)
* PUBLIC: int __str_is_numeric __P((const char *));
*/
int
__str_is_numeric(z)
const char *z;
__str_is_numeric(const char *z)
{
if (*z == '-' || *z == '+')
z++;
@ -396,7 +394,7 @@ static int __utf8_to_int(const unsigned char *z) {
* '?' Matches exactly one character.
*
* [...] Matches one character from the enclosed list of
* characters.
* characters.
*
* [^...] Matches one character not in the enclosed list.
*
@ -410,20 +408,17 @@ static int __utf8_to_int(const unsigned char *z) {
*
* Hints: to match '*' or '?', put them in "[]". Like this:
*
* abc[*]xyz Matches "abc*xyz" only
* abc[*]xyz Matches "abc*xyz" only
*
* PUBLIC: int __str_glob_cmp __P((const unsigned char *,
* PUBLIC: const unsigned char *));
*/
int
__str_glob_cmp(pattern, string)
const unsigned char *pattern;
const unsigned char *string;
int
__str_glob_cmp(const unsigned char *pattern, const unsigned char *string)
{
char c;
unsigned char c, c2;
int invert;
int seen;
char c2;
while((c = *pattern) != 0) {
switch(c) {
@ -528,10 +523,8 @@ __str_glob_cmp(pattern, string)
* PUBLIC: int __str_like_cmp __P((const unsigned char *,
* PUBLIC: const unsigned char *));
*/
int
__str_like_cmp(pattern, string)
const unsigned char *pattern;
const unsigned char *string;
int
__str_like_cmp(const unsigned char *pattern, const unsigned char *string)
{
register int c;
int c2;
@ -590,18 +583,16 @@ __str_like_cmp(pattern, string)
* do not necessarily contain numbers. They could contain text.
*
* If the input strings both look like actual numbers then they
* compare in numerical order. Numerical strings are always less
* compare in numerical order. Numerical strings are always less
* than non-numeric strings so if one input string looks like a
* number and the other does not, then the one that looks like
* a number is the smaller. Non-numeric strings compare in
* a number is the smaller. Non-numeric strings compare in
* lexigraphical order (the same order as strcmp()).
*
* PUBLIC: int __str_numeric_cmp __P((const char *, const char *));
*/
int
__str_numeric_cmp(left, right)
const char *left;
const char *right;
__str_numeric_cmp(const char *left, const char *right)
{
int result;
int left_is_num, right_is_num;
@ -633,7 +624,7 @@ __str_numeric_cmp(left, right)
} else {
result = strcmp(left, right);
}
return result;
return result;
}
/*
@ -651,10 +642,10 @@ __str_numeric_cmp(left, right)
* PUBLIC: int __str_int_in32b __P((const char *));
*/
int
__str_int_in32b(num)
const char *num;
__str_int_in32b(const char *num)
{
int c, i = 0;
int i = 0;
char c;
if (*num == '-' || *num == '+')
num++;
while ((c = num[i]) >= '0' && c <= '9') {
@ -693,9 +684,7 @@ __str_int_in32b(num)
* PUBLIC: void __str_real_as_sortable __P((double, char *));
*/
void
__str_real_as_sortable(r, z)
double r;
char *z;
__str_real_as_sortable(double r, char* z)
{
int neg;
int exp;
@ -706,7 +695,7 @@ __str_real_as_sortable(r, z)
* The digits must be chosen such at their ASCII codes are increasing.
* This means we can not use the traditional base-64 digit set.
*/
static const char digit[] =
static const char digit[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
@ -824,13 +813,10 @@ __str_real_as_sortable(r, z)
* PUBLIC: int __str_cmp __P((const char *, const char *));
*/
int
__str_cmp(a, b)
const char *a;
const char *b;
__str_cmp(const char *a, const char *b)
{
int res = 0;
unsigned char dir = 0, res = 0;
int a_numeric_p, b_numeric_p;
int dir = 0;
while(res == 0 && *a && *b) {
if (a[0] == 'N' || b[0] == 'N') {

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: dbsql.in 7 2007-02-03 13:34:17Z gburd $
*/
#ifndef _DBSQL_H_
@ -28,7 +26,7 @@
#include <stdlib.h> /* Needed for drand48 */
#include <stdarg.h> /* Needed for the definition of va_list */
@inttypes_decl@
@inttypes_h_decl@
#include <stdio.h>
#endif
@ -101,7 +99,7 @@ typedef int (*dbsql_callback)(void *, int, char **, char **);
/*
* If the following macro is set to 1, then NULL values are considered
* distinct for the SELECT DISTINCT statement and for UNION or EXCEPT
* compound queries. No other SQL database engine (among those tested)
* compound queries. No other SQL database engine (among those tested)
* works this way except for OCELOT. But the SQL92 spec implies that
* this is how things should work.
*
@ -183,7 +181,7 @@ extern const char dbsql_encoding[];
#define DBSQL_CANTOPEN (-50988)/* Unable to open the database file */
#define DBSQL_PROTOCOL (-50987)/* Database lock protocol error */
#define DBSQL_SCHEMA (-50986)/* The database schema changed */
#define DBSQL_CONSTRAINT (-50985)/* Abort due to contraint violation */
#define DBSQL_CONSTRAINT (-50985)/* Abort due to constraint violation */
#define DBSQL_MISMATCH (-50984)/* Data type mismatch */
#define DBSQL_MISUSE (-50983)/* Library used incorrectly */
#define DBSQL_AUTH (-50982)/* Authorization denied */
@ -220,14 +218,14 @@ struct __dbsql {
void (*get_errpfx) __P((DBSQL *, const char **));
DB_ENV *(*get_dbenv) __P((DBSQL *));
/* Callback access functions. */
/* Callback access functions. */
void *(*set_tracecall) __P((DBSQL *, void(*)(void *, const char *),\
void *));
#ifndef DBSQL_NO_PROGRESS
void (*set_progresscall) __P((DBSQL *, int, int(*)(void*), void*));
#endif
void *(*set_commitcall) __P((DBSQL *, int(*)(void*), void*));
void (*set_busycall) __P((DBSQL *, int(*)(int, const char *, int),\
void (*set_busycall) __P((DBSQL *, int(*)(DBSQL *, void *, const char *, int),\
void *));
void (*set_timeout) __P((DBSQL *, int ms));
@ -249,9 +247,9 @@ struct __dbsql {
const char ***));
int (*create_function) __P((DBSQL *, const char *, int, int, void *,\
void (*)(dbsql_func_t *, int, const char**),\
void (*)(dbsql_func_t *, int, const char**),\
void (*)(dbsql_func_t *)));
void (*)(dbsql_func_t *, int, const char**), \
void (*)(dbsql_func_t *, int, const char**), \
void (*)(dbsql_func_t *)));
int (*func_return_type) __P((DBSQL *, const char *, int));
#define DBSQL_NUMERIC (-1)
#define DBSQL_TEXT (-2)
@ -277,7 +275,7 @@ struct __dbsql {
* codes is used as the second parameter. The 5th parameter is the name
* of the database ("main", "temp", etc.) if applicable. The 6th parameter
* is the name of the inner-most trigger or view that is responsible for
* the access attempt or NULL if this access attempt is directly from
* the access attempt or NULL if this access attempt is directly from
* input SQL code.
* Arg-3 Arg-4
*/
@ -309,8 +307,8 @@ struct __dbsql {
#define DBSQL_DETACH 25 /* Database Name NULL */
/* Non-callback access functions. */
int (*prepare) __P((DBSQL *, const char *, const char **, dbsql_stmt_t **,\
char **));
int (*prepare) __P((DBSQL *, const char *, const char **,\
dbsql_stmt_t **, char **));
int (*finalize) __P((dbsql_stmt_t *, char **));
int (*reset) __P((dbsql_stmt_t *, char **));
int (*bind) __P((dbsql_stmt_t *, int, const char *, int, int));
@ -345,7 +343,7 @@ struct __dbsql {
#define DBSQL_Threaded 0x00000800 /* Set when we're expected to be
thread safe. */
u_int8_t want_to_close; /* Close after all VDBEs are deallocated */
int next_sig; /* Next value of aDb[0].schema_sig */
u_int32_t next_sig; /* Next value of aDb[0].schema_sig */
int nTable; /* Number of tables in the database */
void *pBusyArg; /* 1st Argument to the busy callback */
int (*xBusyCallback)(DBSQL *, void *, const char*, int);
@ -402,7 +400,7 @@ void *dbsql_user_data __P((dbsql_func_t *));
void *dbsql_aggregate_context __P((dbsql_func_t *, int));
int dbsql_aggregate_count __P((dbsql_func_t *));
/*
/*
* The fifth parameter to dbsql_set_result_blob(), and
* dbsql_set_result_varchar() is a destructor used to dispose of the BLOB
* or text after DBSQL has finished with it. If the fifth argument is the

View file

@ -16,9 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: dbsql.c 7 2007-02-03 13:34:17Z gburd $
*
*/
@ -33,6 +30,7 @@
#include <ctype.h>
#include "dbsql_config.h"
#include "dbsql_int.h"
#include "dbsql.h"
#if !defined(_WIN32) && !defined(WIN32)
@ -54,29 +52,29 @@
#endif
struct globals {
/* The Berkeley DBSQL database manager. */
/* The Berkeley DBSQL database manager. */
DBSQL *dbp;
/* The Berkeley DB database environment. */
/* The Berkeley DB database environment. */
DB_ENV *dbenv;
/* Non-zero if an interrupt (Control-C) has been received. */
/* Non-zero if an interrupt (Control-C) has been received. */
int interrupted_p;
/*
* This is the name of our program. It is set in main(), used
* in a number of other places, mostly for error messages.
*/
/*
* This is the name of our program. It is set in main(), used
* in a number of other places, mostly for error messages.
*/
char *progname;
/* An output stream for error messages, normally stdout. */
FILE *errfp;
/*
* Prompt strings. Initialized in main. Settable using the
* '.prompt [main] [continuation]' command.
*/
char prompt[20]; /* First line prompt. default: "SQL> "*/
/*
* Prompt strings. Initialized in main. Settable using the
* '.prompt [main] [continuation]' command.
*/
char prompt[20]; /* First line prompt. default: "SQL> "*/
char prompt2[20]; /* Continuation prompt. default: "...> " */
};
@ -94,9 +92,7 @@ extern int isatty();
* is done.
*/
static char *
local_getline(prompt, in)
char *prompt;
FILE *in;
local_getline(char* prompt, FILE* in)
{
char *line;
int len;
@ -148,7 +144,7 @@ local_getline(prompt, in)
* attempt to use "readline" for command-line editing. If "isatty"
* is false, use "local_getline" instead of "readline" and issue no prompt.
*
* zPrior is a string of prior text retrieved. If not the empty
* prior is a string of prior text retrieved. If not the empty
* string, then issue a continuation prompt.
*/
static char *
@ -225,11 +221,6 @@ char *modeDescr[MODE_NUM_OF] = {
"insert"
};
/*
* Number of elements in an array
*/
#define ARRAY_SIZE(X) (sizeof(X)/sizeof(X[0]))
/*
* Output the given string as a quoted string using SQL quoting conventions.
*/
@ -295,8 +286,7 @@ output_html_string(out, z)
** This routine runs when the user presses Ctrl-C
*/
static void
interrupt_handler(NOT_USED)
int NOT_USED;
interrupt_handler(int NOT_USED)
{
g.interrupted_p = 1;
if (g.dbp)
@ -308,11 +298,7 @@ interrupt_handler(NOT_USED)
* for each row of a query result.
*/
static int
callback(arg, num_args, args, cols)
void *arg;
int num_args;
char **args;
char **cols;
callback(void* arg, int num_args, char* *args, char* *cols)
{
int i;
struct callback_data *p = (struct callback_data*)arg;
@ -329,7 +315,7 @@ callback(arg, num_args, args, cols)
if (p->cnt++ > 0)
fprintf(p->out, "\n");
for (i = 0; i < num_args; i++) {
fprintf(p->out, "%*s = %s\n", w, cols[i],
fprintf(p->out, "%*s = %s\n", w, cols[i],
(args[i] ? args[i] : p->nullvalue));
}
break;
@ -371,7 +357,7 @@ callback(arg, num_args, args, cols)
w = 10;
}
fprintf(p->out, "%-*.*s%s", w, w,
"----------------------------------------------------------"
"----------------------------------------------------------"
"-----------------------------------",
(i == num_args - 1) ?
"\n" : " ");
@ -517,11 +503,7 @@ set_table_name(p, name)
* This routine should print text sufficient to recreate the table.
*/
static int
dump_callback(arg, num_args, args, cols)
void *arg;
int num_args;
char **args;
char **cols;
dump_callback(void* arg, int num_args, char* *args, char* *cols)
{
struct callback_data *p = (struct callback_data *)arg;
if (num_args != 3)
@ -597,7 +579,7 @@ open_db(p)
case 0:
break;
default:
fprintf(g.errfp, dbsql_strerror(rc));
fprintf(g.errfp, "%s\n", dbsql_strerror(rc));
exit(1);
}
g.dbenv = p->db->get_dbenv(p->db);
@ -699,7 +681,7 @@ do_meta_command(line, p)
p->db->exec_printf(p->db,
"SELECT name, type, sql FROM " MASTER_NAME " "
"WHERE tbl_name LIKE '%q' AND type!='meta' AND sql NOT NULL "
"ORDER BY substr(type,2,1), name",
"ORDER BY substr(type,2,1), name",
dump_callback, p,
&err_msgs, args[i]);
}
@ -787,7 +769,7 @@ do_meta_command(line, p)
}
p->show_header = val;
} else if (c == 'h' && strncmp(args[0], "help", n) == 0) {
fprintf(stderr, help_message);
fprintf(stderr, "%s\n", help_message);
} else if(c == 'i' && strncmp(args[0], "indices", n) == 0 &&
num_args > 1) {
struct callback_data data;
@ -868,6 +850,7 @@ do_meta_command(line, p)
if (p->db) {
p->db->close(p->db);
}
free(line);
g.dbenv->close(g.dbenv, 0);
exit(0);
} else if (c == 'r' && strncmp(args[0], "read", n) == 0 &&
@ -1137,9 +1120,9 @@ process_input(p, in)
continue;
if (line && line[0] == '.' && line_len == 0) {
int rc = do_meta_command(line, p);
free(line);
if (rc)
break;
free(line);
continue;
}
if (_is_command_terminator(line)) {
@ -1197,7 +1180,7 @@ process_input(p, in)
/*
* Return a pathname which is the user's home directory. A
* 0 return indicates an error of some kind. Space to hold the
* NULL return indicates an error of some kind. Space to hold the
* resulting string is obtained from malloc(). The calling
* function should free the result.
*/
@ -1237,51 +1220,47 @@ find_home_dir(void)
}
/*
* Read input from the file given by rc_override. Or if that
* Read input from the file given by 'path'. Or if that
* parameter is NULL, take input from ~/.dbsqlrc
*/
static void
process_rc(p, rc_override)
process_rc(p, path)
struct callback_data *p; /* Configuration data */
const char *rc_override; /* Name of config file. NULL to use
default */
const char *path; /* Path to custom config file,
NULL to use default '~/.dbsqlrc' */
{
char *home_dir = NULL;
const char *rc = rc_override;
char *buf;
FILE *in = NULL;
if (rc == NULL) {
if (path == NULL) {
home_dir = find_home_dir();
if (home_dir == 0) {
fprintf(stderr,"%s: unable to locate home directory\n",
g.progname);
return;
}
buf = malloc(strlen(home_dir) + 15);
if (buf == 0) {
if (buf == NULL) {
fprintf(stderr,"%s: out of memory\n", g.progname);
exit(1);
}
sprintf(buf,"%s/.dbsqlrc", home_dir);
free(home_dir);
rc = (const char*)buf;
path = (const char*)buf;
}
in = fopen(rc, "r");
in = fopen(path, "r");
if (in) {
if (isatty(fileno(stdout))) {
printf("Loading resources from %s\n", rc);
printf("Loading resources from %s\n", path);
}
process_input(p, in);
fclose(in);
}
if (buf == path)
free(buf);
return;
}
/*
** Show available command line options
*/
static const char options[] =
static const char options[] =
"\t--init filename read/process named file\n"
"\t--echo print commands before execution\n"
"\t--[no]header turn headers on or off\n"
@ -1299,10 +1278,9 @@ static const char options[] =
*
*/
static void
usage(show_detail)
int show_detail;
usage(int show_detail)
{
fprintf(stderr, "Usage: db_isql [OPTIONS] FILENAME [SQL]\n");
fprintf(stderr, "Usage: dbsql [OPTIONS] FILENAME [SQL]\n");
if (show_detail) {
fprintf(stderr, "%s", options);
} else {
@ -1328,9 +1306,7 @@ main_init(data)
}
int
main(argc, argv)
int argc;
char **argv;
main(int argc, char* *argv)
{
char *err_msgs = 0;
struct callback_data data;
@ -1465,9 +1441,13 @@ main(argc, argv)
printf("%s\nEnter \".help\" for instructions\n",
dbsql_version(&major, &minor, &patch));
home = find_home_dir();
if (home &&
(history = malloc(strlen(home) + 20)) != 0) {
sprintf(history, "%s/.dbsql_history", home);
if (home) {
history = malloc(strlen(home) + 20);
if (history) {
sprintf(history, "%s/.dbsql_history",
home);
}
free(home);
}
if (history)
read_history(history);
@ -1492,26 +1472,26 @@ main(argc, argv)
int
version_check()
{
int v_major, v_minor, v_patch;
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)dbsql_version(&v_major, &v_minor, &v_patch);
if (v_major != DBSQL_VERSION_MAJOR || v_minor != DBSQL_VERSION_MINOR) {
fprintf(stderr,
/* Make sure we're loaded with the right version of the DB library. */
(void)dbsql_version(&v_major, &v_minor, &v_patch);
if (v_major != DBSQL_VERSION_MAJOR || v_minor != DBSQL_VERSION_MINOR) {
fprintf(stderr,
"%s: version %d.%d doesn't match library version %d.%d\n",
g.progname, DBSQL_VERSION_MAJOR, DBSQL_VERSION_MINOR,
v_major, v_minor);
return (EXIT_FAILURE);
}
return (EXIT_FAILURE);
}
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
"%s: version %d.%d doesn't match library version %d.%d\n",
g.progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
return (EXIT_FAILURE);
}
return (0);
}

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: dbsql_tclsh.c 7 2007-02-03 13:34:17Z gburd $
*/
/*
@ -25,7 +23,6 @@
*/
#include "dbsql_config.h"
#include "dbsql_int.h"
#include "tcl.h"
@ -44,9 +41,9 @@ static char main_loop[] =
"append line [gets stdin]\n"
"if {[info complete $line]} {\n"
"if {[catch {uplevel #0 $line} result]} {\n"
"puts stderr \"Error: $result\"\n"
"puts stderr \"Error: $result\"\n"
"} elseif {$result!=\"\"} {\n"
"puts $result\n"
"puts $result\n"
"}\n"
"set line {}\n"
"} else {\n"
@ -59,9 +56,7 @@ static char main_loop[] =
* main --
*/
int
main(argc, argv)
int argc;
char **argv;
main(int argc, char* *argv)
{
int i;
const char *info;

View file

@ -26,6 +26,9 @@ void __dbsql_err __P((const DBSQL *, const char *, ...)) __attribute__ ((__forma
void __dbsql_errcall __P((const DBSQL *, int, int, const char *, va_list));
void __dbsql_errfile __P((const DBSQL *, int, int, const char *, va_list));
void __error_msg __P((parser_t *, const char *, ...));
int __dbsql_exists __P((DBSQL *, const char *, int *));
int __dbsql_mkdir __P((DBSQL *, const char *, int));
int __dbsql_omode __P((DBSQL *, const char *));
void __hash_init __P((hash_t *, int, int));
void __hash_clear __P((hash_t *));
void *__hash_find __P((const hash_t *, const void *, int));

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: db_int.h 7 2007-02-03 13:34:17Z gburd $
*/
#ifndef _DB_INT_H_
@ -34,21 +32,21 @@
extern "C" {
#endif
extern void *__ua_memcpy__DB_UNIQUE_NAME__ __P((void *, const void *, size_t));
extern int __os_get_errno__DB_UNIQUE_NAME__ __P((void));
extern void __os_set_errno__DB_UNIQUE_NAME__ __P((int));
extern void __os_sleep__DB_UNIQUE_NAME__ __P((DB_ENV *, u_long, u_long));
extern void __os_free__DB_UNIQUE_NAME__ __P((DB_ENV *, void *));
extern int __os_realloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, void *));
extern int __os_malloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, void *));
extern int __os_calloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, size_t, void *));
extern int __os_strdup__DB_UNIQUE_NAME__ __P((DB_ENV *, const char *, void *));
extern void __os_ufree__DB_UNIQUE_NAME__ __P((DB_ENV *, void *));
extern int __os_urealloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, void *));
extern int __os_umalloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, void *));
extern int __os_exists__DB_UNIQUE_NAME__ __P((const char *, int *));
extern int __db_omode__DB_UNIQUE_NAME__ __P((const char *));
extern int __os_calloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, size_t, void *));
extern int __os_exists__DB_UNIQUE_NAME__ __P((DB_ENV *, const char *, int *));
extern int __os_get_errno__DB_UNIQUE_NAME__ __P((void));
extern int __os_id__DB_UNIQUE_NAME__ __P((DB_ENV *, pid_t *, db_threadid_t*));
extern int __os_malloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, void *));
extern int __os_mkdir__DB_UNIQUE_NAME__ __P((DB_ENV *, const char *, int));
extern int __os_realloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, void *));
extern int __os_strdup__DB_UNIQUE_NAME__ __P((DB_ENV *, const char *, void *));
extern int __os_umalloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, void *));
extern int __os_urealloc__DB_UNIQUE_NAME__ __P((DB_ENV *, size_t, void *));
extern void *__ua_memcpy__DB_UNIQUE_NAME__ __P((void *, const void *, size_t));
extern void __os_free__DB_UNIQUE_NAME__ __P((DB_ENV *, void *));
extern void __os_set_errno__DB_UNIQUE_NAME__ __P((int));
extern void __os_ufree__DB_UNIQUE_NAME__ __P((DB_ENV *, void *));
#if defined(__cplusplus)
}

View file

@ -54,8 +54,10 @@ void __add_idx_key_type __P((vdbe_t *, index_t *));
void __create_foreign_key __P((parser_t *, id_list_t *, token_t *, id_list_t *, int));
void __defer_foreign_key __P((parser_t *, int));
void __create_index __P((parser_t *, token_t *, src_list_t *, id_list_t *, int, token_t *, token_t *));
void __drop_index __P((parser_t *, src_list_t *));
id_list_t *__id_list_append __P((id_list_t *, token_t *));
src_list_t *__src_list_append __P((src_list_t *, token_t *, token_t *));
void __src_list_assign_cursors __P((parser_t *, src_list_t *));
void __src_list_add_alias __P((src_list_t *, token_t *));
void __id_list_delete __P((id_list_t *));
int __id_list_index __P((id_list_t *, const char *));
@ -119,6 +121,7 @@ void __vdbe_delete_trigger __P((trigger_t *));
void __drop_trigger __P((parser_t *, src_list_t *));
void __drop_trigger_ptr __P((parser_t *, trigger_t *, int));
int __triggers_exist __P((parser_t *, trigger_t *, int, int, int, expr_list_t *));
int __code_row_trigger __P(());
void __update __P((parser_t *, src_list_t *, expr_list_t *, expr_t *, int));
void __vacuum __P((parser_t *, token_t *));
int __execute_vacuum __P((char **, DBSQL *));
@ -160,7 +163,7 @@ int __sm_get_format_version __P((sm_t *, u_int32_t *));
int __sm_set_schema_sig __P((sm_t *, u_int32_t));
int __sm_get_schema_sig __P((sm_t *, u_int32_t *));
void __register_builtin_funcs __P((DBSQL *));
int get_keyword_code __P((const char *, int));
int __get_keyword_code __P((const char *, int));
int __run_sql_parser __P((parser_t *, const char *, char **));
int __api_step __P((dbsql_stmt_t *, int *, const char ***, const char ***));
int __vdbe_exec __P((vdbe_t *));

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: dbsql_int.in 7 2007-02-03 13:34:17Z gburd $
*/
#ifndef _DBSQL_INT_H_
@ -185,26 +183,26 @@ typedef struct sm_cursor {
* the ATTACH statement during the session.
*/
struct __dbsql_db {
char *zName; /* Name of this database */
sm_t *pBt; /* The storage manager for this database */
int schema_sig; /* Database schema version number for this file */
hash_t tblHash; /* All tables indexed by name */
hash_t idxHash; /* All (named) indices indexed by name */
hash_t trigHash; /* All triggers indexed by name */
hash_t aFKey; /* Foreign keys indexed by to-table */
int inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */
DBSQL *dbp; /* A reference to our managing DBSQL */
int flags; /* Flags associated with this database */
char *zName; /* Name of this database */
sm_t *pBt; /* The storage manager for this database */
u_int32_t schema_sig; /* Database schema version number for this file */
hash_t tblHash; /* All tables indexed by name */
hash_t idxHash; /* All (named) indices indexed by name */
hash_t trigHash; /* All triggers indexed by name */
hash_t aFKey; /* Foreign keys indexed by to-table */
int inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */
DBSQL *dbp; /* A reference to our managing DBSQL */
int flags; /* Flags associated with this database */
/*
* The DBSQL_SCHEMA_LOCKED flag is set when the first OP_Transaction or
* OP_Checkpoint opcode is emitted for a database. This prevents multiple
* occurances of those opcodes for the same database in the same program.
* occurrences of those opcodes for the same database in the same program.
* TODO: do we need this?
*
* Similarly, the DBSQL_COOKIE flag is set when the OP_VerifyCookie opcode
* is emitted, and prevents duplicate OP_VerifyCookies from taking up space
* and slowing down execution. TODO: do we need this?
*
*
* The DBSQL_SCHEMA_LOADED flag is set after the database schema has been
* read into internal hash tables.
*
@ -249,7 +247,7 @@ struct __dbsql_db {
/*
* Aligning items to particular sizes or in pages or memory.
*
* db_align_t --
* uintmax_t --
* Largest integral type, used to align structures in memory. We don't store
* floating point types in structures, so integral types should be sufficient
* (and we don't have to worry about systems that store floats in other than
@ -258,26 +256,29 @@ struct __dbsql_db {
* that happen to require alignment. Note: this alignment isn't sufficient for
* mutexes, which depend on things like cache line alignment. Mutex alignment
* is handled separately, in mutex.h.
*/
@uintmax_t_decl@
/*
*
* db_alignp_t --
* uintptr_t --
* Integral type that's the same size as a pointer. There are places where
* DB modifies pointers by discarding the bottom bits to guarantee alignment.
* We can't use db_align_t, it may be larger than the pointer, and compilers
* We can't use uintmax_t, it may be larger than the pointer, and compilers
* get upset about that. So far we haven't run on any machine where there
* isn't an integral type the same size as a pointer -- here's hoping.
*/
@db_align_t_decl@
@db_alignp_t_decl@
@uintptr_t_decl@
/*
* Convert a pointer to a small integral value.
*
* The (u_int16_t)(db_alignp_t) cast avoids warnings: the (db_alignp_t) cast
* The (u_int16_t)(uintptr_t) cast avoids warnings: the (uintptr_t) cast
* converts the value to an integral type, and the (u_int16_t) cast converts
* it to a small integral type so we don't get complaints when we assign the
* final result to an integral type smaller than db_alignp_t.
* final result to an integral type smaller than uintptr_t.
*/
#define P_TO_UINT32(p) ((u_int32_t)(db_alignp_t)(p))
#define P_TO_UINT32(p) ((u_int32_t)(uintptr_t)(p))
#define PATH_SEPARATOR "@PATH_SEPARATOR@"
@ -291,10 +292,10 @@ struct func_def {
void (*xFunc)(dbsql_func_t*,int,const char**); /* Regular fn */
void (*xStep)(dbsql_func_t*,int,const char**); /* Aggregate fn step */
void (*xFinalize)(dbsql_func_t*); /* Aggregate fn finializer */
int nArg; /* Number of arguments */
int dataType; /* Datatype of the result */
void *pUserData; /* User data parameter */
func_def_t *pNext; /* Next function with same name. */
int nArg; /* Number of arguments */
int dataType; /* Datatype of the result */
void *pUserData; /* User data parameter */
func_def_t *pNext; /* Next function with same name. */
};
/*
@ -446,7 +447,7 @@ struct foreign_key {
* key is set to NULL. CASCADE means that a DELETE or UPDATE of the
* referenced table row is propagated into the row that holds the
* foreign key.
*
*
* The following symbolic values are used to record which type
* of action to take.
*/
@ -478,7 +479,7 @@ struct foreign_key {
* In the table_t structure describing Ex1, nCol==3 because there are
* three columns in the table. In the index_t structure describing
* Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
* The value of aiColumn is {2, 0}. aiColumn[0]==2 because the
* The value of aiColumn is {2, 0}. aiColumn[0]==2 because the
* first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
* The second column to be indexed (c1) has an index of 0 in
* Ex1.aCol[], hence Ex2.aiColumn[1]==0.
@ -586,7 +587,7 @@ struct expr {
};
/*
* These macros can be used to test, set, or clear bits in the
* These macros can be used to test, set, or clear bits in the
* expr_t.flags field.
*/
#define ExprHasProperty(E,P) (((E)->flags&(P))==(P))
@ -861,10 +862,10 @@ struct auth_context {
/*
* Each trigger present in the database schema is stored as an instance of
* struct trigger.
* struct trigger.
*
* Pointers to instances of struct trigger are stored in two ways.
* 1. In the "trigHash" hash table (part of the DBSQL* that represents the
* 1. In the "trigHash" hash table (part of the DBSQL* that represents the
* database). This allows trigger_t structures to be retrieved by name.
* 2. All triggers associated with a single table form a linked list, using the
* pNext member of struct trigger. A pointer to the first element of the
@ -896,15 +897,15 @@ struct trigger {
/*
* An instance of struct trigger_step_t is used to store a single SQL statement
* that is a part of a trigger-program.
* that is a part of a trigger-program.
*
* Instances of struct trigger_step_t are stored in a singly linked list
* (linked using the "pNext" member) referenced by the "step_list" member of
* the associated struct trigger instance. The first element of the linked
* list is the first step of the trigger-program.
*
*
* The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or
* "SELECT" statement. The meanings of the other members is determined by the
* "SELECT" statement. The meanings of the other members is determined by the
* value of "op" as follows:
*
* (op == TK_INSERT)
@ -914,7 +915,7 @@ struct trigger {
* target -> A token holding the name of the table to insert into.
* pExprList -> If this is an INSERT INTO ... VALUES ... statement, then
* this stores values to be inserted. Otherwise NULL.
* pIdList -> If this is an INSERT INTO ... (<column-names>) VALUES ...
* pIdList -> If this is an INSERT INTO ... (<column-names>) VALUES ...
* statement, then this stores the column-names to be
* inserted into.
*
@ -922,7 +923,7 @@ struct trigger {
* target -> A token holding the name of the table to delete from.
* pWhere -> The WHERE clause of the DELETE statement if one is specified.
* Otherwise NULL.
*
*
* (op == TK_UPDATE)
* target -> A token holding the name of the table to update rows of.
* pWhere -> The WHERE clause of the UPDATE statement if one is specified.
@ -930,18 +931,18 @@ struct trigger {
* pExprList -> A list of the columns to update and the expressions to update
* them to. See __update() documentation of "pChanges"
* argument.
*
*
*/
struct trigger_step {
int op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT,
TK_SELECT */
int orconf; /* OE_Rollback etc. */
trigger_t *pTrig; /* The trigger that this step is a part of */
select_t *pSelect; /* Valid for SELECT and sometimes
select_t *pSelect; /* Valid for SELECT and sometimes
INSERT steps (when pExprList == 0) */
token_t target; /* Valid for DELETE, UPDATE, INSERT steps */
expr_t *pWhere; /* Valid for DELETE, UPDATE steps */
expr_list_t *pExprList; /* Valid for UPDATE statements and sometimes
expr_list_t *pExprList; /* Valid for UPDATE statements and sometimes
INSERT steps (when pSelect == 0) */
id_list_t *pIdList; /* Valid for INSERT statements only */
trigger_step_t * pNext; /* Next in the link-list */
@ -953,15 +954,15 @@ struct trigger_step {
* being coded, its associated trigger_stack_t instance is pointed to by the
* "pTriggerStack" member of the Parse structure.
*
* The pTab member points to the table that triggers are being coded on. The
* The pTab member points to the table that triggers are being coded on. The
* newIdx member contains the index of the vdbe cursor that points at the temp
* table that stores the new.* references. If new.* references are not valid
* for the trigger being coded (for example an ON DELETE trigger), then newIdx
* is set to -1. The oldIdx member is analogous to newIdx, for old.*
* references.
*
* The ON CONFLICT policy to be used for the trigger program steps is stored
* as the orconf member. If this is OE_Default, then the ON CONFLICT clause
* The ON CONFLICT policy to be used for the trigger program steps is stored
* as the orconf member. If this is OE_Default, then the ON CONFLICT clause
* specified for individual triggers steps is used.
*
* struct trigger_stack_t has a "pNext" member, to allow linked lists to be
@ -971,7 +972,7 @@ struct trigger_step {
* restored to the pTriggerStack member of the Parse stucture and coding of
* the parent trigger continues.
*
* Before a nested trigger is coded, the linked list pointed to by the
* Before a nested trigger is coded, the linked list pointed to by the
* pTriggerStack is scanned to ensure that the trigger is not about to be coded
* recursively. If this condition is detected, the nested trigger is not coded.
*/
@ -989,7 +990,7 @@ struct trigger_stack {
/*
* The following structure contains information used by the __ref_normalizeXXX
* routines as they walk the parse tree to make database references
* explicit.
* explicit.
*/
typedef struct ref_normalizer_ctx ref_normalizer_ctx_t;
struct ref_normalizer_ctx {

View file

@ -3,8 +3,6 @@
*
* Copyright (c) 1998-2004
* Sleepycat Software. All rights reserved.
*
* $Id: debug.h 7 2007-02-03 13:34:17Z gburd $
*/
#ifndef _DBSQL_DEBUG_H_
@ -39,10 +37,16 @@ extern "C" {
#define DBSQL_ASSERT(e)
#endif
/*
* Purposly ignore return value.
*/
#define IGNORE_RESULT(x) \
(void)!(x)
/*
* "Shut that bloody compiler up!"
*
* Unused, or not-used-yet variable. We need to write and then read the
* Unused, or not-usedyet variable. We need to write and then read the
* variable, some compilers are too bloody clever by half.
*/
#define COMPQUIET(n, v) \

View file

@ -3,8 +3,6 @@
*
* Copyright (c) 1996-2004
* Sleepycat Software. All rights reserved.
*
* $Id: globals.h 7 2007-02-03 13:34:17Z gburd $
*/
/*******************************************************

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: hash.h 7 2007-02-03 13:34:17Z gburd $
*/
/*
* Copyright (c) 1990-2004

View file

@ -7,6 +7,7 @@ extern "C" {
#endif
int __os_jtime __P((double *));
void __os_sleep __P((u_long secs, u_long usecs));
#if defined(__cplusplus)
}

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: random.h 7 2007-02-03 13:34:17Z gburd $
*/
#ifndef _LRAND48_R_H_

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: str.h 7 2007-02-03 13:34:17Z gburd $
*/
/*
* Copyright (c) 1990-2004

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: vdbe.h 7 2007-02-03 13:34:17Z gburd $
*/
#ifndef _VDBE_H_

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: vdbe_int.h 7 2007-02-03 13:34:17Z gburd $
*/
#ifndef _VDBE_INT_H_

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: xvprintf.h 7 2007-02-03 13:34:17Z gburd $
*/
#ifndef _XVPRINTF_H_

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: $
*/
/*

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: $
*/
/* Driver template for the LEMON parser generator.

View file

@ -16,8 +16,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* $Id: os_jtime.c 7 2007-02-03 13:34:17Z gburd $
*/
#include "dbsql_config.h"
@ -49,8 +47,7 @@ int _fake_current_time = 0;
* PUBLIC: int __os_jtime __P((double *));
*/
int
__os_jtime(result)
double *result;
__os_jtime(double* result)
{
#ifndef DB_WIN32
time_t t;

59
src/os/os_sleep.c Normal file
View file

@ -0,0 +1,59 @@
/*-
* DBSQL - A SQL database engine.
*
* Copyright (C) 2007-2008 The DBSQL Group, Inc. - All rights reserved.
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* There are special exceptions to the terms and conditions of the GPL as it
* is applied to this software. View the full text of the exception in file
* LICENSE_EXCEPTIONS in the directory of this software distribution.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
#include "dbsql_config.h"
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#endif
#include "dbsql_int.h"
/*
* __os_sleep --
* Pause the thread of control.
*
* PUBLIC: void __os_sleep __P((u_long secs, u_long usecs));
*/
void
__os_sleep(u_long secs, u_long usecs)
{
/* Calculate the total time in microseconds */
u_long total_usecs = secs * 1000000 + usecs;
/* Convert microseconds to seconds and microseconds */
u_long sleep_secs = total_usecs / 1000000;
u_long sleep_usecs = total_usecs % 1000000;
// Sleep using the standard POSIX sleep function
struct timespec req;
struct timespec rem = { 0 };
req.tv_sec = sleep_secs;
req.tv_nsec = sleep_usecs * 1000;
/* Handle potential interruption by signals */
while (nanosleep(&req, &rem) != 0 && errno == EINTR) {
req = rem;
}
}

View file

@ -1,397 +0,0 @@
/*-
* DBSQL - A SQL database engine.
*
* Copyright (C) 2007 DBSQL Group, Inc - All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* There are special exceptions to the terms and conditions of the GPL as it
* is applied to this software. View the full text of the exception in file
* LICENSE_EXCEPTIONS in the directory of this software distribution.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* http://creativecommons.org/licenses/GPL/2.0/
*
* $Id: api.c 7 2007-02-03 13:34:17Z gburd $
*/
/* cache .c - a LRU cache
*
* Copyright (C) 2004-2006 Gerhard Häring <gh@ghaering.de>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "cache.h"
#include <limits.h>
/* only used internally */
pydbsql_Node* pydbsql_new_node(PyObject* key, PyObject* data)
{
pydbsql_Node* node;
node = (pydbsql_Node*) (pydbsql_NodeType.tp_alloc(&pydbsql_NodeType, 0));
if (!node) {
return NULL;
}
Py_INCREF(key);
node->key = key;
Py_INCREF(data);
node->data = data;
node->prev = NULL;
node->next = NULL;
return node;
}
void pydbsql_node_dealloc(pydbsql_Node* self)
{
Py_DECREF(self->key);
Py_DECREF(self->data);
self->ob_type->tp_free((PyObject*)self);
}
int pydbsql_cache_init(pydbsql_Cache* self, PyObject* args, PyObject* kwargs)
{
PyObject* factory;
int size = 10;
self->factory = NULL;
if (!PyArg_ParseTuple(args, "O|i", &factory, &size)) {
return -1;
}
/* minimum cache size is 5 entries */
if (size < 5) {
size = 5;
}
self->size = size;
self->first = NULL;
self->last = NULL;
self->mapping = PyDict_New();
if (!self->mapping) {
return -1;
}
Py_INCREF(factory);
self->factory = factory;
self->decref_factory = 1;
return 0;
}
void pydbsql_cache_dealloc(pydbsql_Cache* self)
{
pydbsql_Node* node;
pydbsql_Node* delete_node;
if (!self->factory) {
/* constructor failed, just get out of here */
return;
}
/* iterate over all nodes and deallocate them */
node = self->first;
while (node) {
delete_node = node;
node = node->next;
Py_DECREF(delete_node);
}
if (self->decref_factory) {
Py_DECREF(self->factory);
}
Py_DECREF(self->mapping);
self->ob_type->tp_free((PyObject*)self);
}
PyObject* pydbsql_cache_get(pydbsql_Cache* self, PyObject* args)
{
PyObject* key = args;
pydbsql_Node* node;
pydbsql_Node* ptr;
PyObject* data;
node = (pydbsql_Node*)PyDict_GetItem(self->mapping, key);
if (node) {
/* an entry for this key already exists in the cache */
/* increase usage counter of the node found */
if (node->count < LONG_MAX) {
node->count++;
}
/* if necessary, reorder entries in the cache by swapping positions */
if (node->prev && node->count > node->prev->count) {
ptr = node->prev;
while (ptr->prev && node->count > ptr->prev->count) {
ptr = ptr->prev;
}
if (node->next) {
node->next->prev = node->prev;
} else {
self->last = node->prev;
}
if (node->prev) {
node->prev->next = node->next;
}
if (ptr->prev) {
ptr->prev->next = node;
} else {
self->first = node;
}
node->next = ptr;
node->prev = ptr->prev;
if (!node->prev) {
self->first = node;
}
ptr->prev = node;
}
} else {
/* There is no entry for this key in the cache, yet. We'll insert a new
* entry in the cache, and make space if necessary by throwing the
* least used item out of the cache. */
if (PyDict_Size(self->mapping) == self->size) {
if (self->last) {
node = self->last;
if (PyDict_DelItem(self->mapping, self->last->key) != 0) {
return NULL;
}
if (node->prev) {
node->prev->next = NULL;
}
self->last = node->prev;
node->prev = NULL;
Py_DECREF(node);
}
}
data = PyObject_CallFunction(self->factory, "O", key);
if (!data) {
return NULL;
}
node = pydbsql_new_node(key, data);
if (!node) {
return NULL;
}
node->prev = self->last;
Py_DECREF(data);
if (PyDict_SetItem(self->mapping, key, (PyObject*)node) != 0) {
Py_DECREF(node);
return NULL;
}
if (self->last) {
self->last->next = node;
} else {
self->first = node;
}
self->last = node;
}
Py_INCREF(node->data);
return node->data;
}
PyObject* pydbsql_cache_display(pydbsql_Cache* self, PyObject* args)
{
pydbsql_Node* ptr;
PyObject* prevkey;
PyObject* nextkey;
PyObject* fmt_args;
PyObject* template;
PyObject* display_str;
ptr = self->first;
while (ptr) {
if (ptr->prev) {
prevkey = ptr->prev->key;
} else {
prevkey = Py_None;
}
Py_INCREF(prevkey);
if (ptr->next) {
nextkey = ptr->next->key;
} else {
nextkey = Py_None;
}
Py_INCREF(nextkey);
fmt_args = Py_BuildValue("OOO", prevkey, ptr->key, nextkey);
if (!fmt_args) {
return NULL;
}
template = PyString_FromString("%s <- %s ->%s\n");
if (!template) {
return NULL;
}
display_str = PyString_Format(template, fmt_args);
Py_DECREF(template);
Py_DECREF(fmt_args);
if (!display_str) {
return NULL;
}
PyObject_Print(display_str, stdout, Py_PRINT_RAW);
Py_DECREF(display_str);
Py_DECREF(prevkey);
Py_DECREF(nextkey);
ptr = ptr->next;
}
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef cache_methods[] = {
{"get", (PyCFunction)pydbsql_cache_get, METH_O,
PyDoc_STR("Gets an entry from the cache or calls the factory function to produce one.")},
{"display", (PyCFunction)pydbsql_cache_display, METH_NOARGS,
PyDoc_STR("For debugging only.")},
{NULL, NULL}
};
PyTypeObject pydbsql_NodeType = {
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
MODULE_NAME "Node", /* tp_name */
sizeof(pydbsql_Node), /* tp_basicsize */
0, /* tp_itemsize */
(destructor)pydbsql_node_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
0, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
0, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)0, /* tp_init */
0, /* tp_alloc */
0, /* tp_new */
0 /* tp_free */
};
PyTypeObject pydbsql_CacheType = {
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
MODULE_NAME ".Cache", /* tp_name */
sizeof(pydbsql_Cache), /* tp_basicsize */
0, /* tp_itemsize */
(destructor)pydbsql_cache_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
0, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
cache_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)pydbsql_cache_init, /* tp_init */
0, /* tp_alloc */
0, /* tp_new */
0 /* tp_free */
};
extern int pydbsql_cache_setup_types(void)
{
int rc;
pydbsql_NodeType.tp_new = PyType_GenericNew;
pydbsql_CacheType.tp_new = PyType_GenericNew;
rc = PyType_Ready(&pydbsql_NodeType);
if (rc < 0) {
return rc;
}
rc = PyType_Ready(&pydbsql_CacheType);
return rc;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,422 +0,0 @@
/*-
* DBSQL - A SQL database engine.
*
* Copyright (C) 2007 DBSQL Group, Inc - All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* There are special exceptions to the terms and conditions of the GPL as it
* is applied to this software. View the full text of the exception in file
* LICENSE_EXCEPTIONS in the directory of this software distribution.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* http://creativecommons.org/licenses/GPL/2.0/
*
* $Id: api.c 7 2007-02-03 13:34:17Z gburd $
*/
/* module.c - the module itself
*
* Copyright (C) 2004-2006 Gerhard Häring <gh@ghaering.de>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#include "connection.h"
#include "statement.h"
#include "cursor.h"
#include "cache.h"
#include "prepare_protocol.h"
#include "microprotocols.h"
#include "row.h"
#if DBSQL_VERSION_NUMBER >= 3003003
#define HAVE_SHARED_CACHE
#endif
/* static objects at module-level */
PyObject* pydbsql_Error, *pydbsql_Warning, *pydbsql_InterfaceError, *pydbsql_DatabaseError,
*pydbsql_InternalError, *pydbsql_OperationalError, *pydbsql_ProgrammingError,
*pydbsql_IntegrityError, *pydbsql_DataError, *pydbsql_NotSupportedError, *pydbsql_OptimizedUnicode;
PyObject* converters;
int _enable_callback_tracebacks;
static PyObject* module_connect(PyObject* self, PyObject* args, PyObject*
kwargs)
{
/* Python seems to have no way of extracting a single keyword-arg at
* C-level, so this code is redundant with the one in connection_init in
* connection.c and must always be copied from there ... */
static char *kwlist[] = {"database", "timeout", "detect_types", "isolation_level", "check_same_thread", "factory", "cached_statements", NULL, NULL};
char* database;
int detect_types = 0;
PyObject* isolation_level;
PyObject* factory = NULL;
int check_same_thread = 1;
int cached_statements;
double timeout = 5.0;
PyObject* result;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|diOiOi", kwlist,
&database, &timeout, &detect_types, &isolation_level, &check_same_thread, &factory, &cached_statements))
{
return NULL;
}
if (factory == NULL) {
factory = (PyObject*)&pydbsql_ConnectionType;
}
result = PyObject_Call(factory, args, kwargs);
return result;
}
static PyObject* module_complete(PyObject* self, PyObject* args, PyObject*
kwargs)
{
static char *kwlist[] = {"statement", NULL, NULL};
char* statement;
PyObject* result;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &statement))
{
return NULL;
}
if (dbsql_complete_stmt(statement)) {
result = Py_True;
} else {
result = Py_False;
}
Py_INCREF(result);
return result;
}
#ifdef HAVE_SHARED_CACHE
static PyObject* module_enable_shared_cache(PyObject* self, PyObject* args, PyObject*
kwargs)
{
static char *kwlist[] = {"do_enable", NULL, NULL};
int do_enable;
int rc;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &do_enable))
{
return NULL;
}
rc = dbsql_enable_shared_cache(do_enable);
if (rc != DBSQL_SUCCESS) {
PyErr_SetString(pydbsql_OperationalError, "Changing the shared_cache flag failed");
return NULL;
} else {
Py_INCREF(Py_None);
return Py_None;
}
}
#endif /* HAVE_SHARED_CACHE */
static PyObject* module_register_adapter(PyObject* self, PyObject* args, PyObject* kwargs)
{
PyTypeObject* type;
PyObject* caster;
if (!PyArg_ParseTuple(args, "OO", &type, &caster)) {
return NULL;
}
microprotocols_add(type, (PyObject*)&pydbsql_PrepareProtocolType, caster);
Py_INCREF(Py_None);
return Py_None;
}
static PyObject* module_register_converter(PyObject* self, PyObject* args, PyObject* kwargs)
{
PyObject* orig_name;
PyObject* name = NULL;
PyObject* callable;
PyObject* retval = NULL;
if (!PyArg_ParseTuple(args, "SO", &orig_name, &callable)) {
return NULL;
}
/* convert the name to upper case */
name = PyObject_CallMethod(orig_name, "upper", "");
if (!name) {
goto error;
}
if (PyDict_SetItem(converters, name, callable) != 0) {
goto error;
}
Py_INCREF(Py_None);
retval = Py_None;
error:
Py_XDECREF(name);
return retval;
}
static PyObject* enable_callback_tracebacks(PyObject* self, PyObject* args, PyObject* kwargs)
{
if (!PyArg_ParseTuple(args, "i", &_enable_callback_tracebacks)) {
return NULL;
}
Py_INCREF(Py_None);
return Py_None;
}
static void converters_init(PyObject* dict)
{
converters = PyDict_New();
if (!converters) {
return;
}
PyDict_SetItemString(dict, "converters", converters);
}
static PyMethodDef module_methods[] = {
{"connect", (PyCFunction)module_connect, METH_VARARGS|METH_KEYWORDS, PyDoc_STR("Creates a connection.")},
{"complete_statement", (PyCFunction)module_complete, METH_VARARGS|METH_KEYWORDS, PyDoc_STR("Checks if a string contains a complete SQL statement. Non-standard.")},
#ifdef HAVE_SHARED_CACHE
{"enable_shared_cache", (PyCFunction)module_enable_shared_cache, METH_VARARGS|METH_KEYWORDS, PyDoc_STR("Enable or disable shared cache mode for the calling thread. Experimental/Non-standard.")},
#endif
{"register_adapter", (PyCFunction)module_register_adapter, METH_VARARGS, PyDoc_STR("Registers an adapter with pydbsql's adapter registry. Non-standard.")},
{"register_converter", (PyCFunction)module_register_converter, METH_VARARGS, PyDoc_STR("Registers a converter with pydbsql. Non-standard.")},
{"adapt", (PyCFunction)psyco_microprotocols_adapt, METH_VARARGS, psyco_microprotocols_adapt_doc},
{"enable_callback_tracebacks", (PyCFunction)enable_callback_tracebacks, METH_VARARGS, PyDoc_STR("Enable or disable callback functions throwing errors to stderr.")},
{NULL, NULL}
};
struct _IntConstantPair {
char* constant_name;
int constant_value;
};
typedef struct _IntConstantPair IntConstantPair;
static IntConstantPair _int_constants[] = {
{"PARSE_DECLTYPES", PARSE_DECLTYPES},
{"PARSE_COLNAMES", PARSE_COLNAMES},
{"DBSQL_SUCCESS", DBSQL_SUCCESS},
{"DBSQL_DENY", DBSQL_DENY},
{"DBSQL_IGNORE", DBSQL_IGNORE},
{"DBSQL_CREATE_INDEX", DBSQL_CREATE_INDEX},
{"DBSQL_CREATE_TABLE", DBSQL_CREATE_TABLE},
{"DBSQL_CREATE_TEMP_INDEX", DBSQL_CREATE_TEMP_INDEX},
{"DBSQL_CREATE_TEMP_TABLE", DBSQL_CREATE_TEMP_TABLE},
{"DBSQL_CREATE_TEMP_TRIGGER", DBSQL_CREATE_TEMP_TRIGGER},
{"DBSQL_CREATE_TEMP_VIEW", DBSQL_CREATE_TEMP_VIEW},
{"DBSQL_CREATE_TRIGGER", DBSQL_CREATE_TRIGGER},
{"DBSQL_CREATE_VIEW", DBSQL_CREATE_VIEW},
{"DBSQL_DELETE", DBSQL_DELETE},
{"DBSQL_DROP_INDEX", DBSQL_DROP_INDEX},
{"DBSQL_DROP_TABLE", DBSQL_DROP_TABLE},
{"DBSQL_DROP_TEMP_INDEX", DBSQL_DROP_TEMP_INDEX},
{"DBSQL_DROP_TEMP_TABLE", DBSQL_DROP_TEMP_TABLE},
{"DBSQL_DROP_TEMP_TRIGGER", DBSQL_DROP_TEMP_TRIGGER},
{"DBSQL_DROP_TEMP_VIEW", DBSQL_DROP_TEMP_VIEW},
{"DBSQL_DROP_TRIGGER", DBSQL_DROP_TRIGGER},
{"DBSQL_DROP_VIEW", DBSQL_DROP_VIEW},
{"DBSQL_INSERT", DBSQL_INSERT},
{"DBSQL_PRAGMA", DBSQL_PRAGMA},
{"DBSQL_READ", DBSQL_READ},
{"DBSQL_SELECT", DBSQL_SELECT},
{"DBSQL_TRANSACTION", DBSQL_TRANSACTION},
{"DBSQL_UPDATE", DBSQL_UPDATE},
{"DBSQL_ATTACH", DBSQL_ATTACH},
{"DBSQL_DETACH", DBSQL_DETACH},
#if 0 /* TODO */
{"DBSQL_ALTER_TABLE", DBSQL_ALTER_TABLE},
{"DBSQL_REINDEX", DBSQL_REINDEX},
{"DBSQL_ANALYZE", DBSQL_ANALYZE},
#endif
{(char*)NULL, 0}
};
PyMODINIT_FUNC init_dbsql(void)
{
PyObject *module, *dict;
PyObject *tmp_obj;
int i;
module = Py_InitModule("pydbsql2._dbsql", module_methods);
if (!module ||
(pydbsql_row_setup_types() < 0) ||
(pydbsql_cursor_setup_types() < 0) ||
(pydbsql_connection_setup_types() < 0) ||
(pydbsql_cache_setup_types() < 0) ||
(pydbsql_statement_setup_types() < 0) ||
(pydbsql_prepare_protocol_setup_types() < 0)
) {
return;
}
Py_INCREF(&pydbsql_ConnectionType);
PyModule_AddObject(module, "Connection", (PyObject*) &pydbsql_ConnectionType);
Py_INCREF(&pydbsql_CursorType);
PyModule_AddObject(module, "Cursor", (PyObject*) &pydbsql_CursorType);
Py_INCREF(&pydbsql_CacheType);
PyModule_AddObject(module, "Statement", (PyObject*)&pydbsql_StatementType);
Py_INCREF(&pydbsql_StatementType);
PyModule_AddObject(module, "Cache", (PyObject*) &pydbsql_CacheType);
Py_INCREF(&pydbsql_PrepareProtocolType);
PyModule_AddObject(module, "PrepareProtocol", (PyObject*) &pydbsql_PrepareProtocolType);
Py_INCREF(&pydbsql_RowType);
PyModule_AddObject(module, "Row", (PyObject*) &pydbsql_RowType);
if (!(dict = PyModule_GetDict(module))) {
goto error;
}
/*** Create DB-API Exception hierarchy */
if (!(pydbsql_Error = PyErr_NewException(MODULE_NAME ".Error", PyExc_StandardError, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "Error", pydbsql_Error);
if (!(pydbsql_Warning = PyErr_NewException(MODULE_NAME ".Warning", PyExc_StandardError, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "Warning", pydbsql_Warning);
/* Error subclasses */
if (!(pydbsql_InterfaceError = PyErr_NewException(MODULE_NAME ".InterfaceError", pydbsql_Error, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "InterfaceError", pydbsql_InterfaceError);
if (!(pydbsql_DatabaseError = PyErr_NewException(MODULE_NAME ".DatabaseError", pydbsql_Error, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "DatabaseError", pydbsql_DatabaseError);
/* pydbsql_DatabaseError subclasses */
if (!(pydbsql_InternalError = PyErr_NewException(MODULE_NAME ".InternalError", pydbsql_DatabaseError, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "InternalError", pydbsql_InternalError);
if (!(pydbsql_OperationalError = PyErr_NewException(MODULE_NAME ".OperationalError", pydbsql_DatabaseError, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "OperationalError", pydbsql_OperationalError);
if (!(pydbsql_ProgrammingError = PyErr_NewException(MODULE_NAME ".ProgrammingError", pydbsql_DatabaseError, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "ProgrammingError", pydbsql_ProgrammingError);
if (!(pydbsql_IntegrityError = PyErr_NewException(MODULE_NAME ".IntegrityError", pydbsql_DatabaseError,NULL))) {
goto error;
}
PyDict_SetItemString(dict, "IntegrityError", pydbsql_IntegrityError);
if (!(pydbsql_DataError = PyErr_NewException(MODULE_NAME ".DataError", pydbsql_DatabaseError, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "DataError", pydbsql_DataError);
if (!(pydbsql_NotSupportedError = PyErr_NewException(MODULE_NAME ".NotSupportedError", pydbsql_DatabaseError, NULL))) {
goto error;
}
PyDict_SetItemString(dict, "NotSupportedError", pydbsql_NotSupportedError);
/* We just need "something" unique for pydbsql_OptimizedUnicode. It does not really
* need to be a string subclass. Just anything that can act as a special
* marker for us. So I pulled PyCell_Type out of my magic hat.
*/
Py_INCREF((PyObject*)&PyCell_Type);
pydbsql_OptimizedUnicode = (PyObject*)&PyCell_Type;
PyDict_SetItemString(dict, "OptimizedUnicode", pydbsql_OptimizedUnicode);
/* Set integer constants */
for (i = 0; _int_constants[i].constant_name != 0; i++) {
tmp_obj = PyInt_FromLong(_int_constants[i].constant_value);
if (!tmp_obj) {
goto error;
}
PyDict_SetItemString(dict, _int_constants[i].constant_name, tmp_obj);
Py_DECREF(tmp_obj);
}
if (!(tmp_obj = PyString_FromString(PYDBSQL_VERSION))) {
goto error;
}
PyDict_SetItemString(dict, "version", tmp_obj);
Py_DECREF(tmp_obj);
if (!(tmp_obj = PyString_FromString(DBSQL_VERSION_STRING))) {
goto error;
}
PyDict_SetItemString(dict, "dbsql_version", tmp_obj);
Py_DECREF(tmp_obj);
/* initialize microprotocols layer */
microprotocols_init(dict);
/* initialize the default converters */
converters_init(dict);
_enable_callback_tracebacks = 0;
/* Original comment form _bsddb.c in the Python core. This is also still
* needed nowadays for Python 2.3/2.4.
*
* PyEval_InitThreads is called here due to a quirk in python 1.5
* - 2.2.1 (at least) according to Russell Williamson <merel@wt.net>:
* The global interepreter lock is not initialized until the first
* thread is created using thread.start_new_thread() or fork() is
* called. that would cause the ALLOW_THREADS here to segfault due
* to a null pointer reference if no threads or child processes
* have been created. This works around that and is a no-op if
* threads have already been initialized.
* (see pybsddb-users mailing list post on 2002-08-07)
*/
PyEval_InitThreads();
error:
if (PyErr_Occurred())
{
PyErr_SetString(PyExc_ImportError, "pydbsql2._dbsql: init failed");
}
}

Some files were not shown because too many files have changed in this diff Show more