|
bc5ff8352f |
2010-09-03 18:10:19
|
Code_Defect
|
Closed
|
not_specified
|
Get rid of tcl_findLibrary
|
dgp informs me that tcl_findLibrary should be considered obsolete.
The current thinking on how to structure a module is that both the
C code for the module and any Tcl scripts required should be loaded
from pkgIndex.tcl, and the 'tcl_findLibrary' hack should never be
needed. (It appears that there are some order-of-initialization
issues to resolve with the recommended approach, but these can be
tackled if necessary by adding commands in the C code to be called
at the appropriate point in the Tcl code, so that the sequence will
be load DLL - source Tcl library - Tcl library calls initialisation
in DLL in whatever order is needed.
<hr><i>kennykb added on 2010-09-03 18:10:19:</i><br>
It's got rid of. pkgIndex.tcl now sources the Tcl script and then loads the library. There are a few subtleties that are attended to.
|
|
28616c6f8c |
2009-01-02 18:06:32
|
Code_Defect
|
Closed
|
tdbc
|
tdbc bundled with tcl doesn't build on netbsd amd64
|
compilation fails with the following message:
Building package 'tdbc'
gcc -DPACKAGE_NAME=\"tdbc\" -DPACKAGE_TARNAME=\"tdbc\" -DPACKAGE_VERSION=\"1.0b1\" -DPACKAGE_STRING=\"tdbc\ 1.0b1\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DMODULE_SCOPE=extern\ __attribute__\(\(__visibility__\(\"hidden\"\)\)\) -DTCL_WIDE_INT_IS_LONG=1 -DUSE_TCL_STUBS=1 -I"/home/emiliano/src/tcl/generic" -pipe -pthread -O2 -Wall -fPIC -c `echo /home/emiliano/src/tcl/pkgs/tdbc/generic/tdbc.c` -o tdbc.o
gcc -DPACKAGE_NAME=\"tdbc\" -DPACKAGE_TARNAME=\"tdbc\" -DPACKAGE_VERSION=\"1.0b1\" -DPACKAGE_STRING=\"tdbc\ 1.0b1\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DMODULE_SCOPE=extern\ __attribute__\(\(__visibility__\(\"hidden\"\)\)\) -DTCL_WIDE_INT_IS_LONG=1 -DUSE_TCL_STUBS=1 -I"/home/emiliano/src/tcl/generic" -pipe -pthread -O2 -Wall -fPIC -c `echo /home/emiliano/src/tcl/pkgs/tdbc/generic/tdbcStubInit.c` -o tdbcStubInit.o
gcc -DPACKAGE_NAME=\"tdbc\" -DPACKAGE_TARNAME=\"tdbc\" -DPACKAGE_VERSION=\"1.0b1\" -DPACKAGE_STRING=\"tdbc\ 1.0b1\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DNO_VALUES_H=1 -DHAVE_LIMITS_H=1 -DHAVE_SYS_PARAM_H=1 -DUSE_THREAD_ALLOC=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DTCL_THREADS=1 -DMODULE_SCOPE=extern\ __attribute__\(\(__visibility__\(\"hidden\"\)\)\) -DTCL_WIDE_INT_IS_LONG=1 -DUSE_TCL_STUBS=1 -I"/home/emiliano/src/tcl/generic" -pipe -pthread -O2 -Wall -fPIC -c `echo /home/emiliano/src/tcl/pkgs/tdbc/generic/tdbcTokenize.c` -o tdbcTokenize.o
/home/emiliano/src/tcl/pkgs/tdbc/generic/tdbcTokenize.c: In function 'Tdbc_TokenizeSql':
/home/emiliano/src/tcl/pkgs/tdbc/generic/tdbcTokenize.c:138: warning: array subscript has type 'char'
/home/emiliano/src/tcl/pkgs/tdbc/generic/tdbcTokenize.c:139: warning: array subscript has type 'char'
/home/emiliano/src/tcl/pkgs/tdbc/generic/tdbcTokenize.c:146: warning: array subscript has type 'char'
rm -f libtdbc1.0b1.so
gcc -shared -fPIC -o libtdbc1.0b1.so tdbc.o tdbcStubInit.o tdbcTokenize.o -L/home/emiliano/src/tcl/unix -ltclstub8.6
ld: tdbc.o: relocation R_X86_64_PC32 against `tdbcStubs' can not be used when making a shared object; recompile with -fPIC
ld: final link failed: Bad value
this patch solves the problem
--- ./pkgs/tdbc/generic/tdbcStubInit.c.orig 2008-12-23 02:04:46.000000000 -0200
+++ ./pkgs/tdbc/generic/tdbcStubInit.c 2008-12-23 02:08:14.000000000 -0200
@@ -17,7 +17,7 @@
/* !BEGIN!: Do not edit below this line. */
-TdbcStubs tdbcStubs = {
+MODULE_SCOPE TdbcStubs tdbcStubs = {
TCL_STUB_MAGIC,
TDBC_STUBS_EPOCH,
TDBC_STUBS_REVISION,
<hr><i>kennykb added on 2008-12-30 17:38:05:</i><br>
Fixed in [651d34d627]
|
|
98c4a10354 |
2009-02-01 00:10:09
|
Feature_Request
|
Closed
|
--none--
|
Rework $::errorCode to be more try-friendly
|
Currently, the error code returned from TDBC drivers looks like:
<pre>
TDBC <driver> <sqlstate> <detail>
</pre>
It should rather be:
<pre>
TDBC <category> <sqlstate> <driver> <detail>
</pre>
where <category> is a human-readable description of the error category obtained from the first two characters of sqlstate.
<p>This change would make it possible for a 'try' call to catch a particular sort of SQL error, for instance 'data exception':
<pre>
TDBC DATAEXCEPTION ...
</pre>
or more specifically 'division by zero':
<pre>
TDBC DATAEXCEPTION 22012 ...
</pre>
|
|
f916ff78a1 |
2009-01-08 03:35:43
|
Build_Problem
|
Closed
|
|
makefile.vc patch
|
When $(SCRIPT_INSTALL_DIR) has spaces in the name, the install-libraries target fails on the $(CPY) operation.
Index: makefile.vc
===================================================================
RCS file: /cvsroot/tcl/tdbc/win/makefile.vc,v
retrieving revision 1.3
diff -c -r1.3 makefile.vc
*** makefile.vc 22 Dec 2008 00:42:03 -0000 1.3
--- makefile.vc 7 Jan 2009 20:59:23 -0000
***************
*** 466,472 ****
@echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
@if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
@echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
! @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)
install-docs:
@echo Installing documentation files to '$(DOC_INSTALL_DIR)'
--- 466,472 ----
@echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
@if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
@echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
! @$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)"
install-docs:
@echo Installing documentation files to '$(DOC_INSTALL_DIR)'
<hr><i>kbk added on 2009-01-08 03:35:43:</i><br>
Thanks for the patch, Davy. I've merged it upstream. Kevin
|
|
29fe60bd53 |
2009-02-06 17:44:08
|
Code_Defect
|
Closed
|
tdbc
|
2501258 tdbc is built without -fPIC option
|
Hi!
Currently tdbc shared library is built without -fPIC option, which may
cause build problems on architectures other than x86. You can see build
failures on x86_64
(http://experimental.debian.net/fetch.php?&pkg=tcl8.6&ver=8.6.0%7Eb1-1&arch
=amd64&stamp=1230511061&file=log&as=raw) and HP PA-RISC
(http://experimental.debian.net/fetch.php?&pkg=tcl8.6&ver=8.6.0%7Eb1-1&arch
=hppa&stamp=1230521525&file=log&as=raw) architectures.
To fix this bug it should be sufficient to add $(SHLIB_CFLAGS) to COMPILE
definition:
<pre>
--- tcl8.6-8.6.0~b1.orig/pkgs/tdbc1.0b1/Makefile.in
+++ tcl8.6-8.6.0~b1/pkgs/tdbc1.0b1/Makefile.in
@@ -167,7 +167,7 @@
LIBS = @PKG_LIBS@ @LIBS@
AR = @AR@
CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS)
$(AM_CFLAGS) $(CFLAGS)
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS)
$(AM_CFLAGS) $(CFLAGS) $(SHLIB_CFLAGS)
#========================================================================
# Start of user-definable TARGETS section
</pre>
<hr><i>kbk added on 2009-02-06 17:44:08:</i><br>
Teo verifies that 1.0b4 in the Tcl HEAD fixes the problem.
|
|
c30670d169 |
2009-04-18 19:37:18
|
Code_Defect
|
Closed
|
tdbc
|
pkgIndex.tcl files no good for Tcl pre-8.5
|
When installed, tdbc 1.0b1 installs a
pkgIndex.tcl file with these contents:
if {[catch {package require Tcl }]} return
package ifneeded tdbc 1.0b1 \
[list load [file join $dir libtdbc1.0b1.so] tdbc]
And when a 8.4 or earlier interp [source]s
that, it barfs on "1.0b1".
Something didn't get substituted right in
the screening line.
<hr><i>dgp added on 2009-01-15 21:34:55:</i><br>
The Makefile sticks in the value
of $(TCL_VERSION_REQ) at the critical
spot, but that appears to be undefined.
<hr><i>kbk added on 2009-02-15 02:01:03:</i><br>
pkgIndex.tcl changed per dgp's suggestions and released in 1.0b8.
1.0b8 has been merged to the Tcl HEAD.
|
|
67b5df557a |
2009-04-18 19:37:32
|
Documentation
|
Closed
|
tdbc
|
Document Tdbc_MapSqlState and tdbc::mapSqlState
|
Man pages are needed for tdbc::mapSqlState and Tdbc_MapSqlState
|
|
e33df9041f |
2009-04-18 19:37:45
|
Documentation
|
Closed
|
tdbc
|
Editorial nits fixed in tdbc/README
|
--- README.orig Tue Feb 10 07:01:33 2009
+++ README Tue Feb 10 07:05:34 2009
@@ -4,3 +4,3 @@
(TDBC). TDBC is available from a Fossil version control repository
- at http://tdbc.tcl.tk/
+ at http://tdbc.tcl.tk/ .
@@ -15,3 +15,3 @@
The drivers are available from http://tdbc.tcl.tk along with the
-source code of this module A bug database and Wiki are available
+source code of this module. A bug database and Wiki are available
at the same location.
@@ -28,3 +28,3 @@
commands; files with an extension '.3' are for C library functions. The
-file, 'doc/tdbc.n' gives an overview, listing the classes and functions
+file, 'doc/tdbc.n' gives an overview, listing the classes and functions.
@@ -91,3 +91,3 @@
The Tcl community is too large for us to provide much individual support
-for users. If you need help we suggest that you post questions to
+for users. If you need help, we suggest that you post questions to
comp.lang.tcl. We read the newsgroup and will attempt to answer esoteric
<hr><i>kbk added on 2009-02-15 01:52:59:</i><br>
Fixes applied to the head, will be included in 1.0b9 or 1.0.0, whichever comes first.
<hr><i>kbk added on 2009-02-16 21:17:10:</i><br>
Fixes merged to the Tcl HEAD from 1.0b9
|
|
39a78606aa |
2009-04-16 23:03:16
|
Incident
|
Closed
|
tdbc::mysql
|
allrows method of statement object causes segmentation fault on second/third invocation
|
This script fails as shown:
package require tdbc::mysql
set dbx [tdbc::mysql::connection new -user tester -password tester -db test]
foreach sql {
"DROP TABLE IF EXISTS competition_types"
"CREATE TABLE competition_types (cty_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, cty_name VARCHAR(16) NOT NULL, cty_nplayers TINYINT NOT NULL)"
"INSERT INTO competition_types (cty_name, cty_nplayers) VALUES ('individual', 1), ('pairs', 2), ('teams', 4)"
"DESCRIBE competition_types"
"SELECT * FROM competition_types"
} {
puts stdout "Executing $sql"
$dbx foreach row $sql {
puts stdout $row
}
puts stdout ""
}
set sql "SELECT * FROM competition_types WHERE cty_name=:name"
puts stdout "Using database foreach method"
foreach name {individual pairs teams} {
$dbx foreach row $sql [dict create name $name] {
puts stdout $row
flush stdout
}
}
puts stdout ""
set stmt [$dbx prepare $sql]
puts stdout "Using statement foreach method"
foreach name {individual pairs teams} {
$stmt foreach row [dict create name $name] {
puts stdout $row
flush stdout
}
}
puts stdout ""
puts stdout "Using statement allrows method"
foreach name {individual pairs teams} {
puts stdout [$stmt allrows [dict create name $name]]
flush stdout
}
Output:
Executing DROP TABLE IF EXISTS competition_types
Executing CREATE TABLE competition_types (cty_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, cty_name VARCHAR(16) NOT NULL, cty_nplayers TINYINT NOT NULL)
Executing INSERT INTO competition_types (cty_name, cty_nplayers) VALUES ('individual', 1), ('pairs', 2), ('teams', 4)
Executing DESCRIBE competition_types
Field cty_id Type int(11) Null NO Key PRI Extra auto_increment
Field cty_name Type varchar(16) Null NO Key {} Extra {}
Field cty_nplayers Type tinyint(4) Null NO Key {} Extra {}
Executing SELECT * FROM competition_types
cty_id 1 cty_name individual cty_nplayers 1
cty_id 2 cty_name pairs cty_nplayers 2
cty_id 3 cty_name teams cty_nplayers 4
Using database foreach method
cty_id 1 cty_name individual cty_nplayers 1
cty_id 2 cty_name pairs cty_nplayers 2
cty_id 3 cty_name teams cty_nplayers 4
Using statement foreach method
cty_id 1 cty_name individual cty_nplayers 1
cty_id 2 cty_name pairs cty_nplayers 2
cty_id 3 cty_name teams cty_nplayers 4
Using statement allrows method
{cty_id 1 cty_name individual cty_nplayers 1}
{cty_id 2 cty_name pairs cty_nplayers 2}
Segmentation fault
The fault happens consistently at this point, but small changes to the script can cause the fault to happen on the second statement allrows call. (I.e. the "cty_id 2" line is not output.)
Setup:
Tcl 8.6b1.1
ActiveTcl 8.6.0.0.289006
tdbc 1.0b7
tdbc::mysql 1.0b7
Ubuntu 8.04
MySQL 5.0.51a-3ubuntu5.4
<hr><i>kbk added on 2009-04-16 23:03:16:</i><br>
Fixed in commit [f09e74d5c6]
|
|
6d579ee22e |
2009-04-18 19:46:20
|
Code_Defect
|
Closed
|
tdbc
|
foreach arguments documentation/implementation mismatch
|
The syntax of the foreach method of a statement object is documented to be
(according to the manpage:)
$stmt foreach ?-as lists|dicts? ?-columnsvariable name? ?--? dict varName script
(according to TIP#308)
statement foreach ?-as lists|dicts? ?-columnsvariable varName? ?--? ?dictionary? varName script
i.e., it's dictionary before varName. At least in the tdbc::sqlite3 driver however, it's implemented the other way around, as can be seen for example in the following test:
<verbatim>
test tdbcsqlite3-9.33 {stmt foreach / parameters in a dictionary} {*}{
-setup {
set stmt [::db prepare {
SELECT idnum, name FROM people WHERE name LIKE :thePattern
}]
$stmt paramtype thePattern varchar 40
}
-body {
set result {}
$stmt foreach row {thePattern b%} {
lappend result $row
}
set result
}
-cleanup {
$stmt close
}
-result {{idnum 4 name barney} {idnum 5 name betty} {idnum 6 name bam-bam}}
}
</verbatim>
(Typing this down, I also notice that the manpage is missing ?'s around the dict argument, but that's a separate issue.)
|
|
d10e7a735c |
2009-04-18 02:42:22
|
Code_Defect
|
Closed
|
tdbc::mysql
|
tdbc::mysql doesn't throw error correctly if data definition commands fail
|
The script below demonstrates that if a DROP TABLE statement fails, then an error is thrown without any text.
I suspect that the problem may apply to many if not all data definition statements, since executing the same CREATE TABLE command twice in succession has the same effect.
I further suspect that this problem lies in the tdbc::mysql driver rather than the tdbc core, since if you execute the same CREATE TABLE command twice in succession on an sqlite3 connection the error "table FOO already exists" is thrown.
package require tdbc::mysql;
set db [tdbc::mysql::connection new -db test -user tester -password tester];
$db allrows {
CREATE TABLE parent (
parent_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDb};
$db allrows {
CREATE TABLE child (
child_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
child_parent INTEGER NOT NULL,
FOREIGN KEY (child_parent) REFERENCES parent (parent_id)
) ENGINE=InnoDb};
if {[catch {
$db allrows {DROP TABLE parent}
}]} {
puts stdout "errorCode: $errorCode"
};
$db close
<hr><i>kbk added on 2009-04-17 00:12:50:</i><br>
I'm not able to reproduce the behaviour that you describe.
Modifying your script to cause 'catch' to capture the error message:
<verbatim>
package require tdbc::mysql
set db [tdbc::mysql::connection new -socket $env(TEST_SOCKET) \
-db tdbc_test -password $env(TEST_PASSWD)]
$db allrows {DROP TABLE IF EXISTS child}
$db allrows {DROP TABLE IF EXISTS parent}
$db allrows {
CREATE TABLE parent (
parent_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDb}
$db allrows {
CREATE TABLE child (
child_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
child_parent INTEGER NOT NULL,
FOREIGN KEY (child_parent) REFERENCES parent (parent_id)
) ENGINE=InnoDb}
puts [list [catch {
puts "Deleting parent"
$db allrows {DROP TABLE parent}
} result] $result $::errorCode]
$db close
</verbatim>
I get the result:
<verbatim>
Deleting parent
1 {Cannot delete or update a parent row: a foreign key constraint fails} {TDBC CONSTRAINT_VIOLATION 23000 MYSQL 1217}
</verbatim>
which appears to be an entirely reasonable explanation of what went wrong with deleting the table.
I don't know whether I inadvertently fixed the problem while doing something else, or whether your original script had an issue.
<hr><i>kbk added on 2009-04-18 02:42:22:</i><br>
The user retested in 1.0b10 and is now unable to reproduce the problem.
I didn't do anything intentionally to fix it, but I wasn't able to
reproduce it, either.
|
|
ff2b13e75f |
2009-04-18 20:58:45
|
Documentation
|
Closed
|
not_specified
|
tdbc::<driver>::connection new isn't documented
|
The error from
tdbc::<driver>::connection foo ...
suggests, and experiment confirms that
tdbc::<driver>::connection new ...
is a valid command.
It's not documented.
<hr><i>kbk added on 2009-04-06 02:17:02:</i><br>
all of the drivers, not just tdbc::mysql, need this change.
|
|
9441073bc9 |
2009-04-18 19:35:44
|
Documentation
|
Closed
|
tdbc
|
begintransaction / starttransaction
|
A user reports in email that tdbc::mysql documentation has an inconsistency
between 'starttransaction' and 'begintransaction' object commands. Need to
correct documentation throughout and edit TIP 308 as necessary.
|
|
1d89c6ea69 |
2009-04-18 20:23:32
|
Incident
|
Closed
|
not_specified
|
substitution of :x where x is an array
|
TIP 308 has the 'execute' method on tdbc statements, and the related
methods, throw an error if the statement contains a reference to a
variable ':x', but the Tcl variable 'x' is an array. This turns out
to be an awkward check to make (there's no way to do it cheaply from
C, and it greatly complicates the code in a Tcl driver). Need to
make an editorial change to 308 to use NULL in that case (the plain
variable 'x' arguably does not exist) and change the mysql and
odbc drivers accordingly. (The same applies if 'x' has a read trace
that throws an error.)
|
|
f5e1d64d33 |
2009-04-18 19:46:52
|
Documentation
|
Closed
|
tdbc
|
Man page for Tdbc_TokenizeSql
|
There is no man page for Tdbc_TokenizeSql; there needs to be one.
|
|
04d164f7d0 |
2009-05-30 02:14:16
|
Code_Defect
|
Closed
|
tdbc::odbc
|
tdbc::odbc queries inserting a NUL after char 255?
|
Julian Noble reports, on http://wiki.tcl.tk/:
I'm using the precompiled windows tdbc1.0b9 and tdbcodbc1.0b9 - and I'm getting a strange error with some MS Access MEMO fields. A nul character (\0) is appearing at exactly character position 255 within a field value in a '$resultset foreach row ..' loop. (resultset returned from a query ie:
<verbatim>
[db prepare "select * from $queryname"] execute]
</verbatim>
)
I tried producing a simplified version of my program in order to submit a bug report - but couldn't reproduce it in the simple program :( It's got me beat as to where this nul is coming from.
Just flagging it here for now in case someone has some debugging ideas etc..
<hr><i>kbk added on 2009-05-04 04:59:41:</i><br>
Suspect an off-by-one error in the buffer reallocation code near
'convertString:' in tdbcodbc/generic/tdbcodbc.c(GetCell)
<hr><i>kbk added on 2009-05-30 02:14:16:</i><br>
Alan Grunwald reported the same problem, and it should finally be fixed.
The ODBC documentation doesn't entirely tell the truth about null bytes at
the end of a partial buffer. A SQL_C_CHAR buffer has a null byte; a
SQL_C_WCHAR buffer has a null WCHAR, and a SQL_C_BINARY buffer has no terminator.
The code now adjusts byte counts with this in mind.
|
|
e70d9fdce1 |
2009-07-03 05:56:18
|
Code_Defect
|
Closed
|
not_specified
|
tdbc.tcl sqlCode vs sqlcode typo in statementCreate method
|
method statementCreate {name instance sqlCode} {
my variable statementClass
return [$statementClass create $name $instance $sqlcode]
}
results in error: can't read "sqlcode": no such variable, during a call such as: $cmd prepare $sql
<hr><i>kbk added on 2009-07-03 05:56:18:</i><br>
Fixed in 1.0b12
|
|
75681e201d |
2009-07-03 06:00:53
|
Feature_Request
|
Closed
|
not_specified
|
tdbcodbc binary no longer included in sourceforge download?
|
A dll for tdbcodbc used to be included in the windows binaries available at:
https://sourceforge.net/project/showfiles.php?group_id=10894&package_id=305160
..but the latest file tdbc1.0b11-win32.zip doesn't include tdbcodbc
Is this intentional?
<hr><i>kbk added on 2009-07-03 06:00:53:</i><br>
If it was missing, it was unintentional.
There certainly is one in the 1.0b12 zip.
|
|
3e523335bb |
2009-07-03 06:24:25
|
Code_Defect
|
Closed
|
not_specified
|
tdbcodbc is_nullable problem when retrieving column info from MS SQL
|
Testing against an MS SQLServer using the following script:
package require tdbc::odbc
set connstr "Driver={SQL Native Client};Server=127.0.0.1; Database=somedb;Uid=someone;Pwd=somepass;"
tdbc::odbc::connection create db $connstr
set allcolinfo [db columns items]
The script raises the error:
can't use non-numeric string as operand of "!"
The specific line within the 'columns' method is:
dict set row nullable \
[expr {!![dict get $row is_nullable]}]
By placing a puts statement above this line, I found that [dict get $row is_nullable] returns "NO " ie - there is a trailing space which causes it to be invalid in the expr.
<hr><i>kbk added on 2009-07-03 06:24:25:</i><br>
Fixed in 1.0b12
|
|
a85edac3e1 |
2009-06-26 01:57:12
|
Build_Problem
|
Closed
|
tdbc
|
tdbc does not rebuld after a make clean & ./configure change
|
While developing a script to download and build tcl/tk, I noticed that after I compiled tcl, re-./configured with a new --prefix, that tdbc would not build again and that it would make install into the previous --prefix.
I believe it happens to itcl as well, as its also a package and the logic in ./configure tests for the existence of a Makefile to decide whether to rebuild the two extensions.
<hr><i>kbk added on 2009-06-26 01:57:12:</i><br>
This is a Tcl build problem, not a TDBC one... referring it to the Tcl project
|
|
8766b8dc40 |
2011-02-22 02:26:40
|
Code_Defect
|
Fixed
|
not_specified
|
tdbc::odbc crashes tclsh when retrieving DECIMAL data from Oracle
|
<verbatim>
tdbc::odbc crashes tclsh when retrieving DECIMAL data from Oracle.
MS Sql Server works properly with DECIMALs.
Oracle databases: 10.02.0040 (both win and oracle are 64-bit), 10.02.0020 (SunOS 5.9) and 09.02.0010 (SunOS 5.9)
Table myTable:
decimalNumber DECIMAL(10) freeText VARCHAR2(10)
123456 word1
654321 word2
Retrieving VARCHAR2 works fine
~: set db [::tdbc::odbc::connection new "DSN=myDatabase; UID=user; PWD=pass;"]
~: $db allrows "SELECT COUNT(freeText) FROM myTable"
~: {COUNT(FREETEXT) 2.0}
~: $db allrows "SELECT freeText FROM myTable"
~: {FREETEXT word1} {FREETEXT word2}
Retrieving DECIMAL crashes tclsh
~: $db allrows "SELECT COUNT(decimalNumber) FROM myTable"
~: {COUNT(DECIMALNUMBER) 2.0}
~: $db allrows "SELECT decimalNumber FROM myTable"
alloc: invalid block: 0012F31C: 40 0
abnormal program termination
</verbatim>
<hr /><i>anonymous added on 2010-12-13 15:13:45:</i><br />
I guess the crash is provoked by SQLGetData() when using it with SQL_C_SBIGINT or SQL_C_UBIGINT. Both types are not supported by the Oracle ODBC driver. A workaround may be to treat theses "big" integers as strings.
<hr /><i>kennykb added on 2011-02-21 06:36:25:</i><br />
The crash is fixed (in commit [145e893bf82]). The underlying problem - suspected but not proven to be lack of bigint support in the Oracle ODBC driver - is still outstanding. Email sent to the original submitter:
<verbatim>
I'm sorry that I've been so long at getting back to this bug.
It's surely catastrophic, and the only excuse I have is that
I misread the headline totally, and misunderstood it to be
against the (unfinished and unsupported) tdbc::oracle driver.
Mea culpa.
I think that your analysis about SQL_C_SBIGINT may indeed be
correct, since I've found where it will crash if SQLGetData
fails. I'll surely fix the crash so that it returns the
correct error code (which I strongly suspect is
either 22003 Numeric value out of range or
07006 Restricted data type attribute violation). But that,
of course, won't fix the underlying problem.
I think I have an idea how to go about fixing it, though.
Could I get you to open a tdbc::odbc connection to an Oracle
instance and mail me back the result of:
set typesStmt [::tdbc::odbc::typesStatement new $connection]
$typesStmt foreach row {puts $row}
$typesStmt close
? That should enumerate the data types that Oracle is prepared
to cope with, and if I'm right, -5 (bigint) isn't among them.
If that's the case, I can do a similar hack to what I do to
avoid handing wvarchar to database that can't accept it.
</verbatim>
<hr /><i>kennykb added on 2011-02-22 02:26:40:</i><br />
Fix committed in [46f95ec3128], please test.
|
|
42df65a764 |
2009-07-23 20:23:26
|
Code_Defect
|
Fixed
|
|
msys build is broken again
|
The problem described in [10f4a9c15a4] appears to have regressed. I rolled forward to today's commit [cba4d6c4a0], and I don't see the patch applied
in configure.in.
<hr><i>anonymous added on 2009-07-22 02:32:43:</i><br>
For what it's worth, here are the current diffs that make the code buildable on mingw+msys. I added a couple more messages to the configurator, the better to track what's going on.
<verbatim>
Index: tdbcpostgres/Makefile.in
===================================================================
"d:\Fossil\fossil.exe" diff d:/home/200002852/tdbc-slavek/tdbcpostgres/Makefile.in
--- tdbcpostgres/Makefile.in
+++ tdbcpostgres/Makefile.in
@@ -132,11 +132,11 @@
TCLLIBPATH = $(top_builddir)
TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library`
PKG_ENV = @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \
PATH="$(EXTRA_PATH):$(PATH)" \
TCLLIBPATH="$(TCLLIBPATH)" \
- TDBCMYSQL_LIBRARY=`@CYGPATH@ $(srcdir)/library`
+ TDBCPOSTGRES_LIBRARY=`@CYGPATH@ $(srcdir)/library`
TCLSH_PROG = @TCLSH_PROG@
TCLSH = $(PKG_ENV) $(TCLSH_ENV) $(TCLSH_PROG)
#WISH_ENV = TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library`
Index: tdbcpostgres/configure.in
===================================================================
"d:\Fossil\fossil.exe" diff d:/home/200002852/tdbc-slavek/tdbcpostgres/configure.in
--- tdbcpostgres/configure.in
+++ tdbcpostgres/configure.in
@@ -196,30 +196,35 @@
#----------------------------------------------------------------------
# Get Postgre libpq include files, and set POSTGRESS_INCLUDE_SPEC accordingly
#----------------------------------------------------------------------
+AC_MSG_CHECKING([for PostgreSQL include directory])
+POSTGRES_COMMAND="\"${PG_CONFIG}\" --includedir"
+POSTGRES_INCLUDE_DIR=`eval ${POSTGRES_COMMAND}`
+AC_MSG_RESULT(${POSTGRES_INCLUDE_DIR})
TDBCPOSTGRES_SAVED_CPPFLAGS="${CPPFLAGS}"
-POSTGRES_INCLUDE_SPEC="-I`${PG_CONFIG} --includedir`"
-
+POSTGRES_INCLUDE_SPEC="-I${POSTGRES_INCLUDE_DIR}"
CPPFLAGS="${CPPFLAGS} ${POSTGRES_INCLUDE_SPEC}"
AC_CHECK_HEADERS([libpq-fe.h], , AC_MSG_ERROR("cannot find a working libpq-fe.h"))
-
CPPFLAGS="${TDBCPOSTGRES_SAVED_CPPLFAGS}"
TEA_ADD_INCLUDES([${POSTGRES_INCLUDE_SPEC}])
#----------------------------------------------------------------------
# Locate the libpq library
#----------------------------------------------------------------------
-POSTGRES_LIB_SPEC="-L`${PG_CONFIG} --libdir`"
-
+AC_MSG_CHECKING([for PostgreSQL library directory])
+POSTGRES_COMMAND="\"${PG_CONFIG}\" --libdir"
+POSTGRES_LIB_DIR=`eval ${POSTGRES_COMMAND}`
+AC_MSG_RESULT(${POSTGRES_LIB_DIR})
+POSTGRES_LIB_SPEC="-L${POSTGRES_LIB_DIR}"
TDBCPOSTGRES_SAVED_LDFLAGS="${LDFLAGS}"
-
+LDFLAGS="${LDFLAGS} ${POSTGRES_LIB_SPEC}"
AC_CHECK_LIB(pq, PQconnectdb, [
- POSTGRES_LIB_SPEC="${MYSQL_LIB_SPEC} -lpq"
+ POSTGRES_LIB_SPEC="${POSTGRES_LIB_SPEC} -lpq"
], [
AC_MSG_ERROR("cannot find a working libpq library")
])
LDFLAGS="${TDBCPOSTGRES_SAVED_LDFLAGS}"
Index: tdbcpostgres/tests/current.test
===================================================================
"d:\Fossil\fossil.exe" diff d:/home/200002852/tdbc-slavek/tdbcpostgres/tests/current.test
--- tdbcpostgres/tests/current.test
+++ tdbcpostgres/tests/current.test
@@ -24,11 +24,11 @@
}
if {[info exists env(TEST_USER)]} {
lappend connFlags -user $env(TEST_USER)
}
if {[info exists env(TEST_PASSWD)]} {
- lappend connFlags -passwd $env(TEST_PASSWD)
+ lappend connFlags -password $env(TEST_PASSWD)
}
if {[info exists env(TEST_DB)]} {
lappend connFlags -db $env(TEST_DB)
} else {
lappend connFlags -db tdbc_test
</verbatim>
|
|
10f4a9c15a |
2009-07-23 20:24:27
|
Code_Defect
|
Closed
|
|
tdbcpostgres configurator fails on mingw+msys+default Postgres install
|
I tried the tdbcpostgres configurator on a mingw+msys configuration,
with a default Windows binary distribution of Postgres 8.4.
(1) I found that 'configure' didn't match 'configure.in', so I tried
rerunning 'autoconf'. That would have fixed it except that:
(2) For some reason, 'autom4te.cache' is in the repository. It shouldn't
be, and it contained incorrect cached information from 'autoconf'.
(3) Once that was removed, and autoconf-2.59 ran, I ran into trouble
when 'configure' got to the pg_config material, owing to the spaces in
file names. The following patch appeared to fix it:
<verbatim>
$ /d/Fossil/fossil diff tdbcpostgres/configure.in
--- tdbcpostgres/configure.in
+++ tdbcpostgres/configure.in
@@ -1,6 +1,6 @@
-n#!/bin/bash -norc
+#!/bin/bash -norc
dnl This file is an input file used by the GNU "autoconf" program to
dnl generate the file "configure", which is run during Tcl installation
dnl to configure the system for the local environment.
#
# RCS: @(#) $Id: configure.in,v 1.47 2007/02/09 19:06:47 hobbs Exp $
@@ -196,13 +196,14 @@
#----------------------------------------------------------------------
# Get Postgre libpq include files, and set POSTGRESS_INCLUDE_SPEC accordingly
#----------------------------------------------------------------------
+POSTGRES_COMMAND="\"${PG_CONFIG}\" --includedir"
+POSTGRES_INCLUDE_DIR=`echo ${POSTGRES_COMMAND} | sh`
TDBCPOSTGRES_SAVED_CPPFLAGS="${CPPFLAGS}"
-POSTGRES_INCLUDE_SPEC="-I`${PG_CONFIG} --includedir`"
-
+POSTGRES_INCLUDE_SPEC="-I${POSTGRES_INCLUDE_DIR}"
CPPFLAGS="${CPPFLAGS} ${POSTGRES_INCLUDE_SPEC}"
AC_CHECK_HEADERS([libpq-fe.h], , AC_MSG_ERROR("cannot find a working libpq-fe.h"))
CPPFLAGS="${TDBCPOSTGRES_SAVED_CPPLFAGS}"
TEA_ADD_INCLUDES([${POSTGRES_INCLUDE_SPEC}])
@@ -210,16 +211,17 @@
#----------------------------------------------------------------------
# Locate the libpq library
#----------------------------------------------------------------------
-POSTGRES_LIB_SPEC="-L`${PG_CONFIG} --libdir`"
-
+POSTGRES_COMMAND="\"${PG_CONFIG}\" --libdir"
+POSTGRES_LIB_DIR=`echo ${POSTGRES_COMMAND} | sh`
+POSTGRES_LIB_SPEC="-L${POSTGRES_LIB_DIR}"
TDBCPOSTGRES_SAVED_LDFLAGS="${LDFLAGS}"
-
+LDFLAGS="${LDFLAGS} ${POSTGRES_LIB_SPEC}"
AC_CHECK_LIB(pq, PQconnectdb, [
- POSTGRES_LIB_SPEC="${MYSQL_LIB_SPEC} -lpq"
+ POSTGRES_LIB_SPEC="${POSTGRES_LIB_SPEC} -lpq"
], [
AC_MSG_ERROR("cannot find a working libpq library")
])
LDFLAGS="${TDBCPOSTGRES_SAVED_LDFLAGS}"
</verbatim>
<hr><i>slawek added on 2009-07-15 17:25:22:</i><br>
Done, thanks very much.
|
|
9f3fce8c00 |
2009-07-23 20:23:47
|
Code_Defect
|
Closed
|
|
tdbcpostgres 'make shell' doesn't set environment correctly
|
Trying to do 'make shell' after building tdbcpostgres runs a shell, but fails to set things up to load the tdbcpostgres10b11.dll from the build directory. The problem turns out to be that it's using an environment variable name with 'MYSQL'
in it. The following patch is suggested to fix it.
<verbatim>
--- tdbcpostgres/Makefile.in
+++ tdbcpostgres/Makefile.in
@@ -132,11 +132,11 @@
TCLLIBPATH = $(top_builddir)
TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library`
PKG_ENV = @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \
PATH="$(EXTRA_PATH):$(PATH)" \
TCLLIBPATH="$(TCLLIBPATH)" \
- TDBCMYSQL_LIBRARY=`@CYGPATH@ $(srcdir)/library`
+ TDBCPOSTGRES_LIBRARY=`@CYGPATH@ $(srcdir)/library`
TCLSH_PROG = @TCLSH_PROG@
TCLSH = $(PKG_ENV) $(TCLSH_ENV) $(TCLSH_PROG)
#WISH_ENV = TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library`
</verbatim>
<hr><i>slawek added on 2009-07-15 17:36:34:</i><br>
Thanks, I've missed this somehow - now fixed.
|
|
a922f6900b |
2009-07-15 17:34:16
|
Code_Defect
|
Closed
|
|
tdbcpostgres fails in initialisation
|
Trying to do some hand testing, I see that tdbc::postgres gets a segmentation
fault in Tdbcpostgres_Init. There were two distinct problems:
(1) the table of data types was lacking a NULL termination, causing the
loop that was initialising the hash table in per-interp data to run off the end.
(2) the code to install methods was looking for the tdbc::mysql::statement object, which of course should have been tdbc::postgres::statement.
The following patch gets around the issue, and at least allows the library to load.
<verbatim>
--- tdbcpostgres/generic/tdbcpostgres.c
+++ tdbcpostgres/generic/tdbcpostgres.c
@@ -151,16 +151,17 @@
if (--(stmt->refCount) <= 0) { \
DeleteStatement(stmt); \
} \
} while(0)
-typedef struct MysqlDataType {
+typedef struct PostgresDataType {
const char* name; /* Type name */
int num; /* Type number */
-} MysqlDataType;
-static const MysqlDataType dataTypes[] = {
- { "varchar", 0 }
+} PostgresDataType;
+static const PostgresDataType dataTypes[] = {
+ { "varchar", 0 },
+ { NULL, 0 }
};
/* Configuration options for Postgres connections */
@@ -1546,11 +1547,11 @@
Tcl_NewStringObj(tokenStr+1, tokenLen-1));
break;
case ';':
Tcl_SetObjResult(interp,
- Tcl_NewStringObj("tdbc::mysql"
+ Tcl_NewStringObj("tdbc::postgres"
" does not support semicolons "
"in statements", -1));
goto freeNativeSql;
break;
@@ -2001,11 +2002,11 @@
Tcl_DecrRefCount(nameObj);
}
/* Look up the 'statement' class */
- nameObj = Tcl_NewStringObj("::tdbc::mysql::statement", -1);
+ nameObj = Tcl_NewStringObj("::tdbc::postgres::statement", -1);
Tcl_IncrRefCount(nameObj);
if ((curClassObject = Tcl_GetObjectFromObj(interp, nameObj)) == NULL) {
Tcl_DecrRefCount(nameObj);
return TCL_ERROR;
}
</verbatim>
<hr><i>slawek added on 2009-07-15 17:34:16:</i><br>
Fixed ealier, not pulled.
|
|
ac38621feb |
2009-07-15 17:32:05
|
Code_Defect
|
Closed
|
|
many postgres operations are identified as mysql
|
A lot of the code in tdbcpostgres.c was obviously cut-and-pasted from tdbcmysql.c. This is a Good Thing (good programmers borrow, great programmers steal). But at least you should go through and do a global search-and-replace of mysql with postgres, so that the two extensions don't interfere and so that the commentary matches the database.
<hr><i>slawek added on 2009-07-15 17:32:05:</i><br>
I'm regularly checking for it and exterminating such things with sed. This time I fogot to do it.
|
|
dd75b2b7a5 |
2011-02-22 02:56:32
|
Code_Defect
|
Fixed
|
not_specified
|
tdbc::connection transaction doesn't close TRANSACTION on timeout
|
An exception raised by 'my commit' (in method 'transaction') leaves TRANSACTION open.
This behavior was observed using sqlite3 driver with timeouts enabled.
I suppose that 'my rollback' could also raise an exception, in which case the TRANSACTION wouldn't be closed as well.
Does this mean that 'transaction' method shouldn't be used with timeouts enabled?
<hr /><i>kbk added on 2011-02-21 05:28:20 UTC:</i><br />
Emailed to original submitter:
<verbatim>
If 'commit' fails, I'm not sure what the correct action is! I can
certainly attempt to 'rollback' after an error on 'commit', but
a failed rollback really has nowhere else to go, as I understand it.
(And I thought that a failed 'commit' was supposed to initiate
a rollback: did I err?)
The code in question looks like the following. I propose adding
the stanza between tbe two comments, so that commit errors are
reported and rollback attempted. (And removing the commits
in the [switch] cases, since they're handled up above)
Richard, does this look as if it might fix the issue in question?
Kevin
method transaction {script} {
my begintransaction
set status [catch {uplevel 1 $script} result options]
# Propose adding the following code: vvvvvvvvvvvvvvvvvvvv
if {$status in {0 2 3 4}} {
set status2 [catch {my commit} result2 options2]
if {$status2 == 1} {
set status 1
set result $result2
set options $options2
}
}
# End of added code ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
switch -exact -- $status {
0 {
my commit ; #delete this when the commit is added above
}
2 - 3 - 4 {
set options [dict merge {-level 1} \
$options[set options {}]]
dict incr options -level
my commit ; #delete this when the commit is added above
}
default {
my rollback
}
}
return -options $options $result
}
</verbatim>
<hr /><i>kbk added on 2011-02-22 02:56:32 UTC:</i><br />
Fixed in [7413b791cb], please retest.
|
|
8d015d929f |
2009-10-27 01:10:40
|
Code_Defect
|
Deferred
|
tdbc::sqlite3
|
tdbc::sqlite3 driver doesn't resolve duplicate names
|
When doing a join on tables whaving columns with same name like this:
select a.name, b.name from t1 a, t2 b where a.id = b.id;
the tdbc::sqlite driver will only return one 'name' key in a result dict. A result list will contain both values, but the columnvariable will contain the same column name twice.
<hr><i>kbk added on 2009-10-27 01:09:56:</i><br>
This is being recorded as a 'known bug'. It's essentially unfixable
until we convert the SQLite3 driver over to using C, because that's
where it's tripping over the duplicate names.
<hr><i>kbk added on 2009-10-27 01:10:40:</i><br>
Oh, yeah. It can be fixed by using <B>AS</B> clauses to disambiguate the
column names.
|
|
7db2ab741d |
2017-12-12 19:36:55
|
Feature_Request
|
Closed
|
not_specified
|
TDBC install.tcl requires tk, should be optional
|
The INSTALL.tcl file requires Tk for two messages.
I'd suggest if Tk is not found the messages are displayed to stdout via puts.
Not all tdbc users will be using Tk.
<hr><i>anonymous claiming to be dereckson added on 2010-06-30 03:21:57:</i><br>
Currently, tk is only required to build tdbc::mysql
|
|
18c90402fb |
2010-04-06 21:24:31
|
Documentation
|
Fixed
|
not_specified
|
Patch from Tcl HEAD
|
Here's the patch for bringing TDBC more strongly in line with Tcl documentation requirements. This allows its documentation to be built as part of Tcl's HTML doc build.
<hr><i>anonymous added on 2010-01-10 01:40:24:</i><br>
Index: Tdbc_Init.3
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/Tdbc_Init.3,v
retrieving revision 1.1.1.1
retrieving revision 1.3
diff -u -r1.1.1.1 -r1.3
--- Tdbc_Init.3 21 Apr 2009 02:44:27 -0000 1.1.1.1
+++ Tdbc_Init.3 10 Jan 2010 01:32:14 -0000 1.3
@@ -42,10 +42,6 @@
.\" # BS - start boxed text
.\" # ^y = starting y location
.\" # ^b = 1
-.br
-.\" # BS - start boxed text
-.\" # ^y = starting y location
-.\" # ^b = 1
.de BS
.br
.mk ^y
@@ -94,15 +90,16 @@
.SH SYNOPSIS
.nf
\fB#include <tdbc.h>\fR
-.sp
+
int
\fBTdbc_Init\fR(\fIinterp\fR)
-.sp
+
Tcl_Obj *
\fBTdbc_TokenizeSql\fR(\fIinterp, sqlcode\fR)
-.sp
+
const char *
\fBTdbc_MapSqlState\fR(\fIstate\fR)
+.fi
.SH ARGUMENTS
.AS "Tcl_Interp" statement in/out
.AP Tcl_Interp *interp in/out
Index: tdbc.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc.n 10 Jan 2010 00:57:13 -0000 1.2
@@ -47,17 +47,18 @@
.SH "NAME"
tdbc \- Tcl Database Connectivity
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
-package require \fBtdbc::\fR\fIdriver version\fR
-.sp
-\fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...?
+package require \fBtdbc::\fIdriver version\fR
+
+\fBtdbc::\fIdriver\fB::connection create \fIdb\fR ?\fI\-option value\fR...?
+.fi
.BE
.SH "DESCRIPTION"
.PP
Tcl Database Connectivity (TDBC) is a common interface for Tcl
programs to access SQL databases. It is implemented by a series of
-database \fIdrivers:\fR separate modules, each of which adapts Tcl to
+database \fIdrivers\fR: separate modules, each of which adapts Tcl to
the interface of one particular database system. All of the drivers
implement a common series of commands for manipulating the database.
These commands are all named dynamically, since they all represent
Index: tdbc_connection.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_connection.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc_connection.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc_connection.n 10 Jan 2010 00:57:13 -0000 1.2
@@ -47,46 +47,40 @@
.SH "NAME"
tdbc::connection \- TDBC connection object
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
-package require \fBtdbc::\fR\fIdriver version\fR
-.sp
-\fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...?
-.sp
-\fIdb\fR \fBconfigure\fR ?\fI-option value\fR...?
-.sp
-\fIdb\fR \fBclose\fR
-.sp
-\fIdb\fR \fBprepare\fR \fIsql-code\fR
-.sp
-\fIdb\fR \fBpreparecall\fR \fIcall\fR
-.sp
-\fIdb\fR \fBstatements\fR
-.sp
-\fIdb\fR \fBresultsets\fR
-.sp
-\fIdb\fR \fBtables\fR ?\fIpattern\fR?
-.sp
-\fIdb\fR \fBcolumns\fR \fItable\fR ?\fIpattern\fR?
-.sp
-\fIdb\fR \fBbegintransaction\fR
-.sp
-\fIdb\fR \fBcommit\fR
-.sp
-\fIdb\fR \fBrollback\fR
-.sp
-\fIdb\fR \fBtransaction\fR \fIscript\fR
-.sp
-\fIdb\fR \fBallrows\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIsql-code\fR ?\fIdictionary\fR?
-.sp
-\fIdb\fR \fBforeach\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?--? \fIvarName\fR \fIsqlcode\fR ?\fIdictionary\fR? \fIscript\fR
+package require \fBtdbc::\fIdriver version\fR
+
+\fBtdbc::\fIdriver\fB::connection create \fIdb\fR ?\fI\-option value\fR...?
+
+\fIdb \fBconfigure\fR ?\fI\-option value\fR...?
+\fIdb \fBclose\fR
+\fIdb \fBprepare \fIsql-code\fR
+\fIdb \fBpreparecall \fIcall\fR
+\fIdb \fBstatements\fR
+\fIdb \fBresultsets\fR
+\fIdb \fBtables\fR ?\fIpattern\fR?
+\fIdb \fBcolumns \fItable\fR ?\fIpattern\fR?
+\fIdb \fBbegintransaction\fR
+\fIdb \fBcommit\fR
+\fIdb \fBrollback\fR
+\fIdb \fBtransaction \fIscript\fR
+.fi
+.ad l
+.in 14
+.ti 7
+\fIdb \fBallrows\fR ?\fB\-as lists\fR|\fBdicts\fR? ?\fB\-columnsvariable \fIname\fR? ?\fB\-\-\fR? \fIsql-code\fR ?\fIdictionary\fR?
+.br
+.ti 7
+\fIdb \fBforeach\fR ?\fB\-as lists\fR|\fBdicts\fR? ?\fB\-columnsvariable \fIname\fR? ?\fB\-\-\fR? \fIvarName sql-code\fR ?\fIdictionary\fR? \fIscript\fR
+.ad b
.BE
.SH "DESCRIPTION"
.PP
Every database driver for TDBC (Tcl DataBase Connectivity) implements
a \fIconnection\fR object that represents a connection to a database.
By convention, this object is created by the command,
-\fBtdbc::\fR\fIdriver\fR\fB::connection\fR \fBcreate\fR.
+\fBtdbc::\fIdriver\fB::connection create\fR.
This command accepts the name of a Tcl command that will represent the
connection and a possible set of options (see \fBCONFIGURATION
OPTIONS\fR). It establishes a connection to the database and returns
@@ -95,7 +89,7 @@
The \fBconfigure\fR object command on a database connection, if
presented with no arguments, returns a list of alternating keywords
and values representing the connection's current configuration. If
-presented with a single argument \fI-option\fR, it returns the
+presented with a single argument \fI\-option\fR, it returns the
configured value of the given option. Otherwise, it must be given an
even number of arguments which are alternating options and values. The
specified options receive the specified values, and nothing is
@@ -112,18 +106,20 @@
included. See \fBSQL STATEMENTS\fR for a further description of the
SQL that is accepted by this command. The return value is a
newly-created Tcl command that represents the statement. See
-tdbc_statement(n) for the interface accepted by a statement.
+\fBtdbc_statement\fR for the interface accepted by a statement.
.PP
On a database connection where the underlying database and driver
support stored procedures, the \fBpreparecall\fR
object command prepares a call to a stored procedure for execution.
The syntax of the stored procedure call is:
-.sp
+.PP
+.CS
?\fIresultvar\fR =? \fIprocname\fR(?\fIarg\fR ?, \fIarg\fR...?)
-.sp
+.CE
+.PP
The return value is a
newly-created Tcl command that represents the statement. See
-tdbc_statement(n) for the interface accepted by a statement.
+\fBtdbc_statement\fR for the interface accepted by a statement.
.PP
The \fBstatements\fR object command returns a list of statements
that have been created by \fBprepare\fR and \fBpreparecall\fR
@@ -199,19 +195,19 @@
.PP
The \fBallrows\fR object command prepares a SQL statement (given by
the \fIsql-code\fR parameter) to execute against the database.
-It then executes it (see \fBtdbc_statement(n)\fR for details) with the
+It then executes it (see \fBtdbc_statement\fR for details) with the
optional \fIdictionary\fR parameter giving bind variables. Finally,
it uses the \fIallrows\fR object command on the result set (see
-\fBtdbc_resultset(n)\fR) to construct a list of the results. Finally, both
+\fBtdbc_resultset\fR) to construct a list of the results. Finally, both
result set and statement are closed. The return value is the list of
results.
.PP
The \fBforeach\fR object command prepares a SQL statement (given by
the \fIsql-code\fR parameter) to execute against the database.
-It then executes it (see \fBtdbc_statement(n)\fR for details) with the
+It then executes it (see \fBtdbc_statement\fR for details) with the
optional \fIdictionary\fR parameter giving bind variables. Finally,
it uses the \fIforeach\fR object command on the result set (see
-\fBtdbc_resultset(n)\fR) to evaluate the given \fIscript\fR for each row of
+\fBtdbc_resultset\fR) to evaluate the given \fIscript\fR for each row of
the results. Finally, both result set and statement are closed, even
if the given \fIscript\fR results in a \fBreturn\fR, an error, or
an unusual return code.
@@ -219,29 +215,29 @@
The configuration options accepted when the connection is created and
on the connection's \fBconfigure\fR object command include the
following, and may include others specific to a database driver.
-.IP "\fB-encoding\fR \fIname\fR"
+.IP "\fB\-encoding \fIname\fR"
Specifies the encoding to be used in connecting to the database.
The \fIname\fR should be one of the names accepted by the
-\fBencoding(n)\fR command. This option is usually unnecessary; most
+\fBencoding\fR command. This option is usually unnecessary; most
database drivers can figure out the encoding in use by themselves.
-.IP "\fB-isolation\fR \fIlevel\fR"
+.IP "\fB\-isolation \fIlevel\fR"
Specifies the transaction isolation level needed for transactions on
the database. The acceptable values for \fIlevel\fR are shown under
\fBTRANSACTION ISOLATION LEVELS\fR.
-.IP "\fB-timeout\fR \fIms\fR"
+.IP "\fB\-timeout \fIms\fR"
Specifies the maximum time to wait for a an operation database engine before
reporting an error to the caller. The \fIms\fR argument gives the
maximum time in milliseconds. A value of zero (the default) specifies
that the calling process is to wait indefinitely for database
operations.
-.IP "\fB-readonly\fR \fIflag\fR"
+.IP "\fB\-readonly \fIflag\fR"
Specifies that the connection will not modify the database (if the
Boolean parameter \fIflag\fR is true), or that it may modify the
database (if \fIflag\fR is false). If \fIflag\fR is true, this option
may have the effect of raising the transaction isolation level to
\fIreadonly\fR.
-.SH "TRANSACTION ISOLATION LEVELS"
-The acceptable values for the \fB-isolation\fR configuration option
+.SS "TRANSACTION ISOLATION LEVELS"
+The acceptable values for the \fB\-isolation\fR configuration option
are as follows:
.IP \fBreaduncommitted\fR
Allows the transaction to read "dirty", that is, uncommitted
Index: tdbc_mapSqlState.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_mapSqlState.n,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- tdbc_mapSqlState.n 21 Apr 2009 02:44:27 -0000 1.1.1.1
+++ tdbc_mapSqlState.n 10 Jan 2010 01:32:14 -0000 1.2
@@ -59,9 +59,11 @@
.SH "NAME"
tdbc::mapSqlState \- Map SQLSTATE to error class
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
+
\fBtdbc::mapSqlState\fR \fIsqlstate\fR
+.fi
.BE
.SH "DESCRIPTION"
.PP
Index: tdbc_resultset.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_resultset.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc_resultset.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc_resultset.n 10 Jan 2010 00:57:13 -0000 1.2
@@ -59,32 +59,32 @@
.SH "NAME"
tdbc::resultset \- TDBC result set object
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
package require \fBtdbc::\fR\fIdriver version\fR
-.sp
+
\fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...?
-.sp
+
\fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBprepare\fR \fIsql-code\fR\fB]\fR
-.sp
-\fBset\fR \fIresultset\fR \fB[\fR\fI$stmt\fR \fBexecute\fR ?\fIargs...\fR?
-.sp
+\fBset\fR \fIresultset\fR \fB[\fR\fI$stmt\fR \fBexecute\fR ?\fIargs...\fR?\fB]\fR
+
\fI$resultset\fR \fBcolumns\fR
-.sp
-\fI$resultset \fR \fBrowcount\fR
-.sp
+\fI$resultset\fR \fBrowcount\fR
\fI$resultset\fR \fBnextrow\fR ?\fB-as\fR \fBlists\fR|\fBdicts\fR? ?\fB--\fR? \fIvarname\fR
-.sp
\fI$resultset\fR \fBnextlist\fR \fIvarname\fR
-.sp
\fI$resultset\fR \fBnextdict\fR \fIvarname\fR
-.sp
+.fi
+.ad l
+.in 14
+.ti 7
\fI$resultset\fR \fBallrows\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR?
-.sp
-\fI$resultset\fR \fBforeach\fR ?\fB-as lists|dicts\fR?
-?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarname\fR \fIscript\fR
-.sp
+.br
+.ti 7
+\fI$resultset\fR \fBforeach\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarname\fR \fIscript\fR
+.br
+.ti 7
\fI$resultset\fR \fBclose\fR
+.ad b
.BE
.SH "DESCRIPTION"
.PP
Index: tdbc_statement.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_statement.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc_statement.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc_statement.n 10 Jan 2010 00:57:13 -0000 1.2
@@ -58,32 +58,31 @@
.SH "NAME"
tdbc::statement \- TDBC statement object
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
package require \fBtdbc::\fR\fIdriver version\fR
-.sp
+
\fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...?
-.sp
+
\fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBprepare\fR \fIsql-code\fR\fB]\fR
-.sp
-\fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBpreparecall\fR
-\fIcall\fR\fB]\fR
-.sp
+\fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBpreparecall\fR \fIcall\fR\fB]\fR
+
\fI$stmt\fR \fBparams\fR
-.sp
\fI$stmt\fR \fBparamtype\fR ?\fIdirection\fR? \fItype\fR ?\fIprecision\fR? ?\fIscale\fR?
-.sp
\fI$stmt\fR \fBexecute\fR ?\fIdict\fR?
-.sp
\fI$stmt\fR \fBresultsets\fR
-.sp
+.fi
+.ad l
+.in 14
+.ti 7
\fI$stmt\fR \fBallrows\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? ?\fIdict\fR
-.sp
-\fI$stmt\fR \fBforeach\fR ?\fB-as lists|dicts\fR?
-?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarName\fR ?\fIdict\fR?
-\fIscript\fR
-.sp
+.br
+.ti 7
+\fI$stmt\fR \fBforeach\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarName\fR ?\fIdict\fR? \fIscript\fR
+.br
+.ti 7
\fI$stmt\fR \fBclose\fR
+.ad b
.BE
.SH "DESCRIPTION"
.PP
@@ -108,13 +107,17 @@
.PP
The \fBpreparecall\fR object command against the connection accepts a
stylized statement in the form:
-.sp
+.PP
+.CS
\fIprocname\fR \fB(\fR?\fB:\fR\fIvarname\fR? ?\fB,:\fR\fIvarname\fR...?\fB)\fR
-.sp
+.CE
+.PP
or
-.sp
+.PP
+.CS
\fIvarname\fR \fB=\fR \fIprocname\fR \fB(\fR?\fB:\fR\fIvarname\fR? ?\fB,:\fR\fIvarname\fR...?\fB)\fR
-.sp
+.CE
+.PP
This statement represents a call to a stored procedure \fIprocname\fR in the
database. The variable name to the left of the equal sign (if
present), and all variable names that are parameters inside
@@ -171,7 +174,7 @@
found, its value becomes the bound variable's value. If none is found,
the bound variable is assigned a SQL NULL as its value. Once
substitution is finished, the resulting statement is executed. The
-return value is a result set object (see \fBtdbc_resultset(n)\fR for
+return value is a result set object (see \fBtdbc_resultset\fR for
details).
.PP
The \fBresultsets\fR method returns a list of all the result sets that
@@ -183,7 +186,7 @@
optional \fIdict\fR parameter giving bind variables. After executing
the statement,
it uses the \fIallrows\fR object command on the result set (see
-\fBtdbc_resultset(n)\fR) to construct a list of the results. Finally,
+\fBtdbc_resultset\fR) to construct a list of the results. Finally,
the result set is closed. The return value is the list of
results.
.PP
@@ -192,7 +195,7 @@
optional \fIdict\fR parameter giving bind variables. After executing
the statement,
it uses the \fIforeach\fR object command on the result set (see
-\fBtdbc_resultset(n)\fR) to evaluate the given \fIscript\fR for each row of
+\fBtdbc_resultset\fR) to evaluate the given \fIscript\fR for each row of
the results. Finally, the result set is closed, even
if the given \fIscript\fR results in a \fBreturn\fR, an error, or
an unusual return code.
@@ -203,6 +206,7 @@
.SH "EXAMPLES"
The following code would look up a telephone number in a directory,
assuming an appropriate SQL schema:
+.PP
.CS
package require tdbc::sqlite3
tdbc::sqlite3::connection create db phonebook.sqlite3
Index: tdbc_tokenize.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_tokenize.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc_tokenize.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc_tokenize.n 10 Jan 2010 01:32:14 -0000 1.2
@@ -59,9 +59,11 @@
.SH "NAME"
tdbc::tokenize \- TDBC SQL tokenizer
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
+
\fBtdbc::tokenize\fR \fIstring\fR
+.fi
.BE
.SH "DESCRIPTION"
.PP
<hr><i>anonymous claiming to be dkf added on 2010-01-10 11:56:13:</i><br>
Trying again to add the patch, having looked up fossil's formatting rules first:
<verbatim>Index: Tdbc_Init.3
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/Tdbc_Init.3,v
retrieving revision 1.1.1.1
retrieving revision 1.3
diff -u -r1.1.1.1 -r1.3
--- Tdbc_Init.3 21 Apr 2009 02:44:27 -0000 1.1.1.1
+++ Tdbc_Init.3 10 Jan 2010 01:32:14 -0000 1.3
@@ -42,10 +42,6 @@
.\" # BS - start boxed text
.\" # ^y = starting y location
.\" # ^b = 1
-.br
-.\" # BS - start boxed text
-.\" # ^y = starting y location
-.\" # ^b = 1
.de BS
.br
.mk ^y
@@ -94,15 +90,16 @@
.SH SYNOPSIS
.nf
\fB#include <tdbc.h>\fR
-.sp
+
int
\fBTdbc_Init\fR(\fIinterp\fR)
-.sp
+
Tcl_Obj *
\fBTdbc_TokenizeSql\fR(\fIinterp, sqlcode\fR)
-.sp
+
const char *
\fBTdbc_MapSqlState\fR(\fIstate\fR)
+.fi
.SH ARGUMENTS
.AS "Tcl_Interp" statement in/out
.AP Tcl_Interp *interp in/out
Index: tdbc.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc.n 10 Jan 2010 00:57:13 -0000 1.2
@@ -47,17 +47,18 @@
.SH "NAME"
tdbc \- Tcl Database Connectivity
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
-package require \fBtdbc::\fR\fIdriver version\fR
-.sp
-\fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...?
+package require \fBtdbc::\fIdriver version\fR
+
+\fBtdbc::\fIdriver\fB::connection create \fIdb\fR ?\fI\-option value\fR...?
+.fi
.BE
.SH "DESCRIPTION"
.PP
Tcl Database Connectivity (TDBC) is a common interface for Tcl
programs to access SQL databases. It is implemented by a series of
-database \fIdrivers:\fR separate modules, each of which adapts Tcl to
+database \fIdrivers\fR: separate modules, each of which adapts Tcl to
the interface of one particular database system. All of the drivers
implement a common series of commands for manipulating the database.
These commands are all named dynamically, since they all represent
Index: tdbc_connection.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_connection.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc_connection.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc_connection.n 10 Jan 2010 00:57:13 -0000 1.2
@@ -47,46 +47,40 @@
.SH "NAME"
tdbc::connection \- TDBC connection object
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
-package require \fBtdbc::\fR\fIdriver version\fR
-.sp
-\fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...?
-.sp
-\fIdb\fR \fBconfigure\fR ?\fI-option value\fR...?
-.sp
-\fIdb\fR \fBclose\fR
-.sp
-\fIdb\fR \fBprepare\fR \fIsql-code\fR
-.sp
-\fIdb\fR \fBpreparecall\fR \fIcall\fR
-.sp
-\fIdb\fR \fBstatements\fR
-.sp
-\fIdb\fR \fBresultsets\fR
-.sp
-\fIdb\fR \fBtables\fR ?\fIpattern\fR?
-.sp
-\fIdb\fR \fBcolumns\fR \fItable\fR ?\fIpattern\fR?
-.sp
-\fIdb\fR \fBbegintransaction\fR
-.sp
-\fIdb\fR \fBcommit\fR
-.sp
-\fIdb\fR \fBrollback\fR
-.sp
-\fIdb\fR \fBtransaction\fR \fIscript\fR
-.sp
-\fIdb\fR \fBallrows\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIsql-code\fR ?\fIdictionary\fR?
-.sp
-\fIdb\fR \fBforeach\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?--? \fIvarName\fR \fIsqlcode\fR ?\fIdictionary\fR? \fIscript\fR
+package require \fBtdbc::\fIdriver version\fR
+
+\fBtdbc::\fIdriver\fB::connection create \fIdb\fR ?\fI\-option value\fR...?
+
+\fIdb \fBconfigure\fR ?\fI\-option value\fR...?
+\fIdb \fBclose\fR
+\fIdb \fBprepare \fIsql-code\fR
+\fIdb \fBpreparecall \fIcall\fR
+\fIdb \fBstatements\fR
+\fIdb \fBresultsets\fR
+\fIdb \fBtables\fR ?\fIpattern\fR?
+\fIdb \fBcolumns \fItable\fR ?\fIpattern\fR?
+\fIdb \fBbegintransaction\fR
+\fIdb \fBcommit\fR
+\fIdb \fBrollback\fR
+\fIdb \fBtransaction \fIscript\fR
+.fi
+.ad l
+.in 14
+.ti 7
+\fIdb \fBallrows\fR ?\fB\-as lists\fR|\fBdicts\fR? ?\fB\-columnsvariable \fIname\fR? ?\fB\-\-\fR? \fIsql-code\fR ?\fIdictionary\fR?
+.br
+.ti 7
+\fIdb \fBforeach\fR ?\fB\-as lists\fR|\fBdicts\fR? ?\fB\-columnsvariable \fIname\fR? ?\fB\-\-\fR? \fIvarName sql-code\fR ?\fIdictionary\fR? \fIscript\fR
+.ad b
.BE
.SH "DESCRIPTION"
.PP
Every database driver for TDBC (Tcl DataBase Connectivity) implements
a \fIconnection\fR object that represents a connection to a database.
By convention, this object is created by the command,
-\fBtdbc::\fR\fIdriver\fR\fB::connection\fR \fBcreate\fR.
+\fBtdbc::\fIdriver\fB::connection create\fR.
This command accepts the name of a Tcl command that will represent the
connection and a possible set of options (see \fBCONFIGURATION
OPTIONS\fR). It establishes a connection to the database and returns
@@ -95,7 +89,7 @@
The \fBconfigure\fR object command on a database connection, if
presented with no arguments, returns a list of alternating keywords
and values representing the connection's current configuration. If
-presented with a single argument \fI-option\fR, it returns the
+presented with a single argument \fI\-option\fR, it returns the
configured value of the given option. Otherwise, it must be given an
even number of arguments which are alternating options and values. The
specified options receive the specified values, and nothing is
@@ -112,18 +106,20 @@
included. See \fBSQL STATEMENTS\fR for a further description of the
SQL that is accepted by this command. The return value is a
newly-created Tcl command that represents the statement. See
-tdbc_statement(n) for the interface accepted by a statement.
+\fBtdbc_statement\fR for the interface accepted by a statement.
.PP
On a database connection where the underlying database and driver
support stored procedures, the \fBpreparecall\fR
object command prepares a call to a stored procedure for execution.
The syntax of the stored procedure call is:
-.sp
+.PP
+.CS
?\fIresultvar\fR =? \fIprocname\fR(?\fIarg\fR ?, \fIarg\fR...?)
-.sp
+.CE
+.PP
The return value is a
newly-created Tcl command that represents the statement. See
-tdbc_statement(n) for the interface accepted by a statement.
+\fBtdbc_statement\fR for the interface accepted by a statement.
.PP
The \fBstatements\fR object command returns a list of statements
that have been created by \fBprepare\fR and \fBpreparecall\fR
@@ -199,19 +195,19 @@
.PP
The \fBallrows\fR object command prepares a SQL statement (given by
the \fIsql-code\fR parameter) to execute against the database.
-It then executes it (see \fBtdbc_statement(n)\fR for details) with the
+It then executes it (see \fBtdbc_statement\fR for details) with the
optional \fIdictionary\fR parameter giving bind variables. Finally,
it uses the \fIallrows\fR object command on the result set (see
-\fBtdbc_resultset(n)\fR) to construct a list of the results. Finally, both
+\fBtdbc_resultset\fR) to construct a list of the results. Finally, both
result set and statement are closed. The return value is the list of
results.
.PP
The \fBforeach\fR object command prepares a SQL statement (given by
the \fIsql-code\fR parameter) to execute against the database.
-It then executes it (see \fBtdbc_statement(n)\fR for details) with the
+It then executes it (see \fBtdbc_statement\fR for details) with the
optional \fIdictionary\fR parameter giving bind variables. Finally,
it uses the \fIforeach\fR object command on the result set (see
-\fBtdbc_resultset(n)\fR) to evaluate the given \fIscript\fR for each row of
+\fBtdbc_resultset\fR) to evaluate the given \fIscript\fR for each row of
the results. Finally, both result set and statement are closed, even
if the given \fIscript\fR results in a \fBreturn\fR, an error, or
an unusual return code.
@@ -219,29 +215,29 @@
The configuration options accepted when the connection is created and
on the connection's \fBconfigure\fR object command include the
following, and may include others specific to a database driver.
-.IP "\fB-encoding\fR \fIname\fR"
+.IP "\fB\-encoding \fIname\fR"
Specifies the encoding to be used in connecting to the database.
The \fIname\fR should be one of the names accepted by the
-\fBencoding(n)\fR command. This option is usually unnecessary; most
+\fBencoding\fR command. This option is usually unnecessary; most
database drivers can figure out the encoding in use by themselves.
-.IP "\fB-isolation\fR \fIlevel\fR"
+.IP "\fB\-isolation \fIlevel\fR"
Specifies the transaction isolation level needed for transactions on
the database. The acceptable values for \fIlevel\fR are shown under
\fBTRANSACTION ISOLATION LEVELS\fR.
-.IP "\fB-timeout\fR \fIms\fR"
+.IP "\fB\-timeout \fIms\fR"
Specifies the maximum time to wait for a an operation database engine before
reporting an error to the caller. The \fIms\fR argument gives the
maximum time in milliseconds. A value of zero (the default) specifies
that the calling process is to wait indefinitely for database
operations.
-.IP "\fB-readonly\fR \fIflag\fR"
+.IP "\fB\-readonly \fIflag\fR"
Specifies that the connection will not modify the database (if the
Boolean parameter \fIflag\fR is true), or that it may modify the
database (if \fIflag\fR is false). If \fIflag\fR is true, this option
may have the effect of raising the transaction isolation level to
\fIreadonly\fR.
-.SH "TRANSACTION ISOLATION LEVELS"
-The acceptable values for the \fB-isolation\fR configuration option
+.SS "TRANSACTION ISOLATION LEVELS"
+The acceptable values for the \fB\-isolation\fR configuration option
are as follows:
.IP \fBreaduncommitted\fR
Allows the transaction to read "dirty", that is, uncommitted
Index: tdbc_mapSqlState.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_mapSqlState.n,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- tdbc_mapSqlState.n 21 Apr 2009 02:44:27 -0000 1.1.1.1
+++ tdbc_mapSqlState.n 10 Jan 2010 01:32:14 -0000 1.2
@@ -59,9 +59,11 @@
.SH "NAME"
tdbc::mapSqlState \- Map SQLSTATE to error class
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
+
\fBtdbc::mapSqlState\fR \fIsqlstate\fR
+.fi
.BE
.SH "DESCRIPTION"
.PP
Index: tdbc_resultset.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_resultset.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc_resultset.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc_resultset.n 10 Jan 2010 00:57:13 -0000 1.2
@@ -59,32 +59,32 @@
.SH "NAME"
tdbc::resultset \- TDBC result set object
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
package require \fBtdbc::\fR\fIdriver version\fR
-.sp
+
\fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...?
-.sp
+
\fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBprepare\fR \fIsql-code\fR\fB]\fR
-.sp
-\fBset\fR \fIresultset\fR \fB[\fR\fI$stmt\fR \fBexecute\fR ?\fIargs...\fR?
-.sp
+\fBset\fR \fIresultset\fR \fB[\fR\fI$stmt\fR \fBexecute\fR ?\fIargs...\fR?\fB]\fR
+
\fI$resultset\fR \fBcolumns\fR
-.sp
-\fI$resultset \fR \fBrowcount\fR
-.sp
+\fI$resultset\fR \fBrowcount\fR
\fI$resultset\fR \fBnextrow\fR ?\fB-as\fR \fBlists\fR|\fBdicts\fR? ?\fB--\fR? \fIvarname\fR
-.sp
\fI$resultset\fR \fBnextlist\fR \fIvarname\fR
-.sp
\fI$resultset\fR \fBnextdict\fR \fIvarname\fR
-.sp
+.fi
+.ad l
+.in 14
+.ti 7
\fI$resultset\fR \fBallrows\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR?
-.sp
-\fI$resultset\fR \fBforeach\fR ?\fB-as lists|dicts\fR?
-?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarname\fR \fIscript\fR
-.sp
+.br
+.ti 7
+\fI$resultset\fR \fBforeach\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarname\fR \fIscript\fR
+.br
+.ti 7
\fI$resultset\fR \fBclose\fR
+.ad b
.BE
.SH "DESCRIPTION"
.PP
Index: tdbc_statement.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_statement.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc_statement.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc_statement.n 10 Jan 2010 00:57:13 -0000 1.2
@@ -58,32 +58,31 @@
.SH "NAME"
tdbc::statement \- TDBC statement object
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
package require \fBtdbc::\fR\fIdriver version\fR
-.sp
+
\fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...?
-.sp
+
\fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBprepare\fR \fIsql-code\fR\fB]\fR
-.sp
-\fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBpreparecall\fR
-\fIcall\fR\fB]\fR
-.sp
+\fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBpreparecall\fR \fIcall\fR\fB]\fR
+
\fI$stmt\fR \fBparams\fR
-.sp
\fI$stmt\fR \fBparamtype\fR ?\fIdirection\fR? \fItype\fR ?\fIprecision\fR? ?\fIscale\fR?
-.sp
\fI$stmt\fR \fBexecute\fR ?\fIdict\fR?
-.sp
\fI$stmt\fR \fBresultsets\fR
-.sp
+.fi
+.ad l
+.in 14
+.ti 7
\fI$stmt\fR \fBallrows\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? ?\fIdict\fR
-.sp
-\fI$stmt\fR \fBforeach\fR ?\fB-as lists|dicts\fR?
-?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarName\fR ?\fIdict\fR?
-\fIscript\fR
-.sp
+.br
+.ti 7
+\fI$stmt\fR \fBforeach\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarName\fR ?\fIdict\fR? \fIscript\fR
+.br
+.ti 7
\fI$stmt\fR \fBclose\fR
+.ad b
.BE
.SH "DESCRIPTION"
.PP
@@ -108,13 +107,17 @@
.PP
The \fBpreparecall\fR object command against the connection accepts a
stylized statement in the form:
-.sp
+.PP
+.CS
\fIprocname\fR \fB(\fR?\fB:\fR\fIvarname\fR? ?\fB,:\fR\fIvarname\fR...?\fB)\fR
-.sp
+.CE
+.PP
or
-.sp
+.PP
+.CS
\fIvarname\fR \fB=\fR \fIprocname\fR \fB(\fR?\fB:\fR\fIvarname\fR? ?\fB,:\fR\fIvarname\fR...?\fB)\fR
-.sp
+.CE
+.PP
This statement represents a call to a stored procedure \fIprocname\fR in the
database. The variable name to the left of the equal sign (if
present), and all variable names that are parameters inside
@@ -171,7 +174,7 @@
found, its value becomes the bound variable's value. If none is found,
the bound variable is assigned a SQL NULL as its value. Once
substitution is finished, the resulting statement is executed. The
-return value is a result set object (see \fBtdbc_resultset(n)\fR for
+return value is a result set object (see \fBtdbc_resultset\fR for
details).
.PP
The \fBresultsets\fR method returns a list of all the result sets that
@@ -183,7 +186,7 @@
optional \fIdict\fR parameter giving bind variables. After executing
the statement,
it uses the \fIallrows\fR object command on the result set (see
-\fBtdbc_resultset(n)\fR) to construct a list of the results. Finally,
+\fBtdbc_resultset\fR) to construct a list of the results. Finally,
the result set is closed. The return value is the list of
results.
.PP
@@ -192,7 +195,7 @@
optional \fIdict\fR parameter giving bind variables. After executing
the statement,
it uses the \fIforeach\fR object command on the result set (see
-\fBtdbc_resultset(n)\fR) to evaluate the given \fIscript\fR for each row of
+\fBtdbc_resultset\fR) to evaluate the given \fIscript\fR for each row of
the results. Finally, the result set is closed, even
if the given \fIscript\fR results in a \fBreturn\fR, an error, or
an unusual return code.
@@ -203,6 +206,7 @@
.SH "EXAMPLES"
The following code would look up a telephone number in a directory,
assuming an appropriate SQL schema:
+.PP
.CS
package require tdbc::sqlite3
tdbc::sqlite3::connection create db phonebook.sqlite3
Index: tdbc_tokenize.n
===================================================================
RCS file: /cvsroot/tcl/tdbc/doc/tdbc_tokenize.n,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- tdbc_tokenize.n 21 Apr 2009 02:44:27 -0000 1.1.1.3
+++ tdbc_tokenize.n 10 Jan 2010 01:32:14 -0000 1.2
@@ -59,9 +59,11 @@
.SH "NAME"
tdbc::tokenize \- TDBC SQL tokenizer
.SH "SYNOPSIS"
+.nf
package require \fBtdbc 1.0\fR
-.sp
+
\fBtdbc::tokenize\fR \fIstring\fR
+.fi
.BE
.SH "DESCRIPTION"
.PP
</verbatim>
<hr><i>kennykb added on 2010-04-06 21:24:31:</i><br>
Merged all documentation changes from the Tcl HEAD
|
|
fcc8231b9e |
2010-04-06 23:32:25
|
Documentation
|
Fixed
|
not_specified
|
missing section in tdbc_connection.n
|
There is a reference to a section "SQL STATEMENTS", but no such section exists. Fix by either adding the section or removing the reference.
<hr><i>kennykb added on 2010-04-06 23:32:25:</i><br>
Reference redirected to 'tdbc::statement', which is what was intended.
|
|
cf7bc364cc |
2010-04-06 22:59:59
|
Feature_Request
|
Fixed
|
not_specified
|
make stub table, StateLookup and command Table "const"
|
Here is a patch which makes the stub table
as well as the StateLookup and commandTable
"const", so those are placed in read-only
memory, like Tcl does now with other stub
(and other) tables.
Regards,
Jan Nijtmans
=============================================
Index: generic/tdbcStubInit.c
===================================================================
RCS file: /cvsroot/tcl/tdbc/generic/tdbcStubInit.c,v
retrieving revision 1.1.1.4
diff -c -r1.1.1.4 tdbcStubInit.c
*** generic/tdbcStubInit.c 1 Feb 2009 22:41:57 -0000 1.1.1.4
--- generic/tdbcStubInit.c 1 Mar 2010 20:15:03 -0000
***************
*** 15,25 ****
#include "tdbcInt.h"
! MODULE_SCOPE TdbcStubs tdbcStubs;
/* !BEGIN!: Do not edit below this line. */
! TdbcStubs tdbcStubs = {
TCL_STUB_MAGIC,
TDBC_STUBS_EPOCH,
TDBC_STUBS_REVISION,
--- 15,25 ----
#include "tdbcInt.h"
! MODULE_SCOPE const TdbcStubs tdbcStubs;
/* !BEGIN!: Do not edit below this line. */
! const TdbcStubs tdbcStubs = {
TCL_STUB_MAGIC,
TDBC_STUBS_EPOCH,
TDBC_STUBS_REVISION,
Index: generic/tdbcDecls.h
===================================================================
RCS file: /cvsroot/tcl/tdbc/generic/tdbcDecls.h,v
retrieving revision 1.1.1.3
diff -c -r1.1.1.3 tdbcDecls.h
*** generic/tdbcDecls.h 1 Feb 2009 22:41:57 -0000 1.1.1.3
--- generic/tdbcDecls.h 1 Mar 2010 20:15:03 -0000
***************
*** 50,56 ****
int magic;
int epoch;
int revision;
! struct TdbcStubHooks *hooks;
int (*tdbc_Init) (Tcl_Interp* interp); /* 0 */
Tcl_Obj* (*tdbc_TokenizeSql) (Tcl_Interp* interp, const char* statement); /* 1 */
--- 50,56 ----
int magic;
int epoch;
int revision;
! const struct TdbcStubHooks *hooks;
int (*tdbc_Init) (Tcl_Interp* interp); /* 0 */
Tcl_Obj* (*tdbc_TokenizeSql) (Tcl_Interp* interp, const char* statement); /* 1 */
Index: generic/tdbcStubLib.c
===================================================================
RCS file: /cvsroot/tcl/tdbc/generic/tdbcStubLib.c,v
retrieving revision 1.1.1.2
diff -c -r1.1.1.2 tdbcStubLib.c
*** generic/tdbcStubLib.c 30 Dec 2008 19:08:12 -0000 1.1.1.2
--- generic/tdbcStubLib.c 1 Mar 2010 20:15:03 -0000
***************
*** 19,25 ****
#define USE_TDBC_STUBS 1
#include "tdbc.h"
! const TdbcStubs* tdbcStubsPtr;
/*
*-----------------------------------------------------------------------------
--- 19,26 ----
#define USE_TDBC_STUBS 1
#include "tdbc.h"
! MODULE_SCOPE const TdbcStubs* tdbcStubsPtr;
! const TdbcStubs *tdbcStubsPtr = NULL;
/*
*-----------------------------------------------------------------------------
***************
*** 57,63 ****
ClientData clientData = NULL;
/* Client data for the package */
const char* actualVersion; /* Actual version of the package */
! TdbcStubs* stubsPtr; /* Stubs table for the public API */
/* Load the package */
--- 58,64 ----
ClientData clientData = NULL;
/* Client data for the package */
const char* actualVersion; /* Actual version of the package */
! const TdbcStubs* stubsPtr; /* Stubs table for the public API */
/* Load the package */
***************
*** 77,83 ****
if (actualVersion == NULL) {
return NULL;
} else {
! stubsPtr = (TdbcStubs*) clientData;
if (stubsPtr->epoch != epoch) {
errorMsg = "mismatched epoch number";
} else if (stubsPtr->revision < revision) {
--- 78,84 ----
if (actualVersion == NULL) {
return NULL;
} else {
! stubsPtr = (const TdbcStubs*) clientData;
if (stubsPtr->epoch != epoch) {
errorMsg = "mismatched epoch number";
} else if (stubsPtr->revision < revision) {
Index: generic/tdbc.c
===================================================================
RCS file: /cvsroot/tcl/tdbc/generic/tdbc.c,v
retrieving revision 1.1.1.3
diff -c -r1.1.1.3 tdbc.c
*** generic/tdbc.c 1 Feb 2009 22:41:57 -0000 1.1.1.3
--- generic/tdbc.c 1 Mar 2010 20:15:03 -0000
***************
*** 22,32 ****
static int TdbcMapSqlStateObjCmd(ClientData unused, Tcl_Interp* interp,
int objc, Tcl_Obj *const objv[]);
! MODULE_SCOPE TdbcStubs tdbcStubs;
/* Table of commands to create for TDBC */
! static struct TdbcCommand {
const char* name; /* Name of the command */
Tcl_ObjCmdProc* proc; /* Command procedure */
} commandTable[] = {
--- 22,32 ----
static int TdbcMapSqlStateObjCmd(ClientData unused, Tcl_Interp* interp,
int objc, Tcl_Obj *const objv[]);
! MODULE_SCOPE const TdbcStubs tdbcStubs;
/* Table of commands to create for TDBC */
! static const struct TdbcCommand {
const char* name; /* Name of the command */
Tcl_ObjCmdProc* proc; /* Command procedure */
} commandTable[] = {
***************
*** 37,43 ****
/* Table mapping SQLSTATE to error code */
! static struct SqlStateLookup {
const char* stateclass;
const char* message;
} StateLookup [] = {
--- 37,43 ----
/* Table mapping SQLSTATE to error code */
! static const struct SqlStateLookup {
const char* stateclass;
const char* message;
} StateLookup [] = {
Index: tools/genStubs.tcl
===================================================================
RCS file: /cvsroot/tcl/tdbc/tools/genStubs.tcl,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 genStubs.tcl
*** tools/genStubs.tcl 17 Dec 2008 18:00:35 -0000 1.1.1.1
--- tools/genStubs.tcl 1 Mar 2010 20:15:03 -0000
***************
*** 694,700 ****
foreach hook $hooks($name) {
set capHook [string toupper [string index $hook 0]]
append capHook [string range $hook 1 end]
! append text " struct ${capHook}Stubs *${hook}Stubs;\n"
}
append text "} ${capName}StubHooks;\n"
}
--- 694,700 ----
foreach hook $hooks($name) {
set capHook [string toupper [string index $hook 0]]
append capHook [string range $hook 1 end]
! append text " const struct ${capHook}Stubs *${hook}Stubs;\n"
}
append text "} ${capName}StubHooks;\n"
}
***************
*** 702,708 ****
append text " int magic;\n"
append text " int epoch;\n"
append text " int revision;\n"
! append text " struct ${capName}StubHooks *hooks;\n\n"
emitSlots $name text
--- 702,708 ----
append text " int magic;\n"
append text " int epoch;\n"
append text " int revision;\n"
! append text " const struct ${capName}StubHooks *hooks;\n\n"
emitSlots $name text
***************
*** 741,747 ****
set CAPName [string toupper $name]
if {[info exists hooks($name)]} {
! append text "\nstatic ${capName}StubHooks ${name}StubHooks = \{\n"
set sep " "
foreach sub $hooks($name) {
append text $sep "&${sub}Stubs"
--- 741,747 ----
set CAPName [string toupper $name]
if {[info exists hooks($name)]} {
! append text "\nstatic const ${capName}StubHooks ${name}StubHooks = \{\n"
set sep " "
foreach sub $hooks($name) {
append text $sep "&${sub}Stubs"
***************
*** 749,755 ****
}
append text "\n\};\n"
}
! append text "\n${capName}Stubs ${name}Stubs = \{\n"
append text " TCL_STUB_MAGIC,\n"
append text " ${CAPName}_STUBS_EPOCH,\n"
append text " ${CAPName}_STUBS_REVISION,\n"
--- 749,755 ----
}
append text "\n\};\n"
}
! append text "\nconst ${capName}Stubs ${name}Stubs = \{\n"
append text " TCL_STUB_MAGIC,\n"
append text " ${CAPName}_STUBS_EPOCH,\n"
append text " ${CAPName}_STUBS_REVISION,\n"
<hr><i>kennykb added on 2010-04-06 22:59:59:</i><br>
Patches accepted (with a few minor tweaks to correct some linkage problems
on mingw).
|
|
02c0131ba1 |
2010-04-06 21:27:56
|
Documentation
|
Fixed
|
not_specified
|
docs diverge from Tcl HEAD
|
The HEAD of the Tcl bundle of tdbc contains
patches to the doc files that are not reflected
back in the 1.0b13 release. I'd like the
Tcl HEAD and some actual release of tdbc to
reach agreement so that Tcl can be in the
bundling business instead of the patching
business.
Appears that tdbc fossil has some commits
since the 1.0b13 release as well.
<hr><i>kennykb added on 2010-04-06 21:27:56:</i><br>
HEAD changes to the documentation merged back upstream.
|
|
99e97fb098 |
2010-04-06 21:28:46
|
Build_Problem
|
Fixed
|
not_specified
|
Tdbc_Init manual page may be installed in the wrong place
|
If the directory <prefix>/man/man3 doesn't exist, the Tdbc_Init.3 file gets installed as <prefix>/man/man3 instead of <prefix>/man/man3/Tdbc_Init.3. This can happen when omitting the docs while installing Tcl, eg:
make install-binaries install-libraries install-packages
The problem is that the makefile doesn't create the man3 directory. It does create the man/mann directory. Adding a similar line for man/man3 in the install-doc target seems to fix the problem.
--- ../pkgs/tdbc/Makefile.in~ 2010-03-29 20:57:43.000000000 +0200
+++ ../pkgs/tdbc/Makefile.in 2010-04-05 23:50:19.000000000 +0200
@@ -229,6 +229,7 @@
install-doc: doc
@mkdir -p $(DESTDIR)$(mandir)/mann
+ @mkdir -p $(DESTDIR)$(mandir)/man3
@echo "Installing documentation in $(DESTDIR)$(mandir)"
@list='$(srcdir)/doc/*.3'; for i in $$list; do \
echo "Installing $$i"; \
<hr><i>kennykb added on 2010-04-06 21:28:46:</i><br>
Fixed.
|
|
a4d7f2a64f |
2010-04-17 22:32:56
|
Documentation
|
Open
|
|
documentation for statement getSql missing
|
The statement object has a method "getSql" which is not document:
<nowiki>
<p>set statement [$db_name prepare {select PATH_ID from PATHS where PATH=:path and parent_id is null}]
<p>::oo::Obj943372::Stmt::10
<p>(bin) 71 % $statement getSql
<p>select PATH_ID from PATHS where PATH=:path and parent_id is null
<p>(bin) 72 %
</nowiki>
|
|
a2ad232bf6 |
2010-04-17 22:51:05
|
Feature_Request
|
Open
|
|
feature request: add a getSql method to the resultset object
|
The statement object currently has an (undocumented) method yielding the underlying sql statement used for the construction of the specific statement object. (using bind variables notation).
request: add a similar method for the resultset object, showing the substituted values.
Using the example from the man page:
<nowiki>
<p>package require tdbc::sqlite3
<p>tdbc::sqlite3::connection create db phonebook.sqlite3
<p>set statement [db prepare {
<p> select phone_num from directory where first_name = :firstname and last_name = :lastname
<p> }]
<p>set firstname Fred
<p>set lastname Flintstone
<p>
<p>$statement getSql gives:
<p><i> select phone_num from directory where first_name = :firstname and last_name = :lastname </i>
<p>
<p>set rs [$statement execute]
<p><b>Request:</b>
<p>$rs getSql would give:
<p> <i>select phone_num from directory where first_name = 'Fred' and last_name = 'Flintstone' </i>
<p>
<p>
<p><b>Motivation:</b> this feature would be very helpfull in debugging..
</nowiki>
|
|
c76ee42eb7 |
2010-09-03 18:06:22
|
Build_Problem
|
Deferred
|
not_specified
|
tdbcoracle/configure.in typo
|
In sh scripting, the if comparison operator is = and not ==.
Symptom:
checking for ORACLE_HOME variable... test: x/usr/local/oracle8-client: unexpected operator
/usr/local/oracle8-client
Patch:
--- configure.in.old 2010-06-30 02:54:09.000000000 +0000
+++ configure.in 2010-06-30 02:44:58.000000000 +0000
@@ -191,7 +191,7 @@
#--------------------------------------------------------------------
AC_MSG_CHECKING([for ORACLE_HOME variable])
-if test x"${ORACLE_HOME}" == "x"; then
+if test x"${ORACLE_HOME}" = "x"; then
AC_MSG_ERROR("ORACLE_HOME environment variable is not set. Set it to oracle product directory containing rdbms dir.");
fi
AC_MSG_RESULT(${ORACLE_HOME})
<hr><i>anonymous added on 2010-06-30 03:00:25:</i><br>
patch: http://pastebin.com/sYzwBMXU
<hr><i>kennykb added on 2010-09-03 18:06:22:</i><br>
tdbc::oracle is in the repos in case anyone wants to pick up where Slavek left off. It's not part of the release, because it's not quite done.
|
|
b0ea387b9f |
2010-09-03 18:08:26
|
Build_Problem
|
Deferred
|
not_specified
|
tdbcoracle/configure.in oci.h location issue on FreeBSD
|
On FreeBSD 8.0 with Oracle 8 client (oracle8-client-0.2.0_1 package), oci.h is in rdbms/demo and not in rdbms/public.
The configure script needs *BOTH* directories as -D.
Something like ORACLE_INCLUDE_SPEC="-I${ORACLE_INCLUDE_DIR} -I${ORACLE_HOME}/rdbms/demo" works.
<hr><i>anonymous claiming to be dereckson added on 2010-06-30 03:19:24:</i><br>
Patch: http://paste2.org/p/897729
<hr><i>kennykb added on 2010-09-03 18:08:26:</i><br>
tdbc::oracle is not part of any release; it's left in the repository in case anyone wants to take over the unfinished project.
|
|
3e7f26479a |
2010-09-03 18:11:31
|
Build_Problem
|
Deferred
|
not_specified
|
tdbcoracle/configure.in can't detect libocciei on FreeBSD
|
ld -lclntsh fails.
config.log with genuine configure.in: http://pastebin.com/NEFXXni9
According those errors and under advice of a FreeBSD port maintainer, I tried -lm -lcompat (required on FreeBSD for cuserid function)
config.log with -lm -lcompat: http://pastebin.com/nmAASZgH
<hr><i>kennykb added on 2010-09-03 18:11:31:</i><br>
tdbcoracle is not part of any release; it's in the repository in case someone else wants to pick up the unfinished project where Slavek left off.
|
|
6460f1f738 |
2011-02-21 04:59:51
|
Feature_Request
|
Tested
|
not_specified
|
There should be a way to escape "@", or to configure supported parameter prefixes in tokenizer
|
A problem in tdbc preventing a lot of its uses with e.g. tdbcodbc + Microsoft SQL Server: @[alphanumerics] is always interpreted by tdbc as a host parameter, with no way to escape it. Transact-SQL has its own uses for @: it is the only way to pass parameters by name to stored procedures, to specify a freshly defined stored procedure's argument list, to name and access @@error etc.
I'd readily accept the fact that TDBC drivers fail to give access to *all* features for *every* underlying database interface. But being unable to pass *certain kinds of SQL statements* to an underlying engine is _not_ acceptable.
E.g. if I have a DBI layer lacking output parameters (like, duh, current tdbcodbc), Transact-SQL would enable me to work around it by declaring a temporary @local, EXEC'ing sp @param=@local OUTPUT and then selecting @local AS result. But with TDBC, I have no such option: declaring @local is impossible, as the tokenizer will see a host parameter there. What bothers me here is not only that certain statements are impossible, but that they are impossible because TDBC is `too smart' and doing `too much' (as opposed to TDBC lacking some code).
Some options to allow @'s while staying backward compatible: (1) allow @@ or maybe \@ to mean literal @, (2) allow tokenizer to be *reconfigured* to ignore @localname and handle only :paramname syntax as a host parameter, (3) make TDBC C-language part call overridden version of tokenize method, when this method is redefined, (4) introduce some weird TDBC-specific syntax like @@{ /* we just asked not to look for host parameters inside braces */ } and provide an option to enable the syntax, disabling it by default for compatibility.
Both (1) and (2) are easy to implement, and any of (1) (2) (4) would make a great benefit for most users of MSSQL (Transact-SQL).
<hr /><i>kennykb added on 2011-02-20 22:31:26:</i><br />
The bug is indeed there and an appropriate modification is in progress as part of ongoing work that will also resolve issues with multiple result sets and with output parameters from stored procedures. ☺
<hr /><i>kennykb added on 2011-02-21 04:59:51:</i><br />
I actually went one better: @ is now a special character for substitution only in tdbc::sqlite3. In all the other platforms, there's no need for it as a substitution character, and there *is* need for it as a user variable sigil.
Also added multiple result sets, because it appears that SQL Server doesn't
keep the values of @variables between calls.
|
|
dadf1ab854 |
2010-09-03 18:04:24
|
Build_Problem
|
Closed
|
not_specified
|
tdbc::sqlite3 cannot [package require] (therefore test) from build dir
|
Trying out tdbc::sqlite3 under the tcl/pkgs system,
I find that [package require tdbc::sqlite3] only works
after install, or when the build directory happens to
be a subdirectory of the source directory.
In other situations, the path ../library/tdbcsqlite3.tcl
relative to pkgIndex.tcl doesn't point to anything, so
the provide script fails.
<hr><i>anonymous added on 2010-09-02 16:01:45:</i><br>
ok, I see that tdbc::sqlite3 wants to install using
the TM configuration, so the more useful approach may
be to look into how to make that work.
<hr><i>kennykb added on 2010-09-03 18:04:24:</i><br>
It should be able to, now. Thanks for the fix in the chat.
|
|
dfff082917 |
2011-02-21 05:08:51
|
Documentation
|
Closed
|
not_specified
|
typo in $resultset allrows man page
|
in SYNOPSIS section of
tdbc::resultset - TDBC result set object
$resultset allrows ?-as lists|dicts? ?-columnsvariable name? ?--?
should be
$resultset allrows ?-as lists|dicts? ?-columnsvariable name? ?--? script
<hr /><i>kbk added on 2011-02-21 05:08:51 UTC:</i><br />
Not so - the 'allrows' method doesn't take a script.
|
|
4cf30e29a1 |
2017-12-14 21:01:14
|
Code_Defect
|
Closed
|
not_specified
|
install.tcl error
|
Start the install.tcl the following error occurs, but the installation seems to be corret
---------------------------
Error in startup script
---------------------------
expected boolean value but got "8.6b1.2"
while executing
"if {[package present Tk]} {
tk_messageBox -type ok -detail "Files installed in $instdir" -message
"TDBC drivers installed." -icon info
} else ..."
(file "C:\xxxxxxxx.\Downloads\tdbc1.0b16-win32\INSTALL.tcl" line 38)
---------------------------
|
|
4357c31d89 |
2012-07-13 01:41:26
|
Code_Defect
|
Fixed
|
not_specified
|
tdbc::postgres bytea hex escape problem
|
Postgres 9.0 changed the default formatting of bytea fields returned in a select to 'hex'. The default behaviour before was 'escape'. This confuses the code in ResultSetNextrowMethod:
<code>
colObj = Tcl_SubstObj(interp, toSubst, TCL_SUBST_BACKSLASHES);
</code>
Since the hex formatted data is in the form \x68656c6c6f2c20776f726c64 (for "hello, world"), Tcl_SubstObj converts this to "d"
Workarounds are to change the default in postgres.conf
<verbatim>
bytea_output = 'escape'
</verbatim>
or set it on the connection:
<code>
db allrows {set bytea_output = 'escape'}
</code>
Ideal would be teach ResultSetNextrowMethod about the hex format though, as this is the preferred format going forward.
Code to reproduce:
<verbatim>
package require tdbc::postgres
tdbc::postgres::connection create db -db wf_test
db allrows {create temporary table foo (bar bytea)}
db allrows {insert into foo (bar) values ('hello, world')}
#db allrows {set bytea_output = 'escape'}
puts [lindex [db allrows -as lists {select bar from foo}] 0 0]
db close
</verbatim>
Expected output: "hello, world"
Got: "d"
<hr /><i>kbk added on 2012-07-13 01:41:26 UTC:</i><br />
Fixed in [10d916626e5bf1bb0ccd77c0fcf7e034fa641567]
|
|
b846c1f20e |
2012-07-13 01:52:49
|
Incident
|
Closed
|
tdbc::odbc
|
crash when idle-exit, after 'package require tdbc::odbc'
|
<verbatim>
# start with tclsh.exe; tcl_patchLevel 8.6b1.2 and wait for the crash.
rename exit orig_exit
proc exit {{a 0}} {
puts "exit"
after idle [list ::orig_exit $a]
}
proc anything {} {
package require tdbc::odbc
puts "anything"
}
anything
</verbatim>
<hr /><i>kbk added on 2012-07-13 01:52:49 UTC:</i><br />
Works On My Machine - please resubmit if this continues to fail post-8.6b3
|
|
bf0603a6a2 |
2012-11-16 20:49:02
|
Feature_Request
|
Closed
|
not_specified
|
postgres does not support semicolons
|
Hi,
It appears that the tdbc::postgres adapter does not support semicolons in statements making it a bit difficult to create functions
Looks like it was introduced here:
http://mirror1.tcl.tk/tdbc/info/a922f6900b
<hr /><i>kbk added on 2012-07-13 01:57:15 UTC:</i><br />
tdbc is supposed to handle plain, "bread and butter" data manipulation requests (INSERT, SELECT, UPDATE, DELETE, and SP calls) from Tcl. Sophisticated data
definition tasks may remain beyond it. I'm leaving this incident open as a
feature request, but SP creation will need a fair amount of work to get right, and will ordinarily be done through other tools in any event.
<hr /><i>kbk added on 2012-11-16 20:49:02 UTC:</i><br />
This is a postgresql-specific problem and is being closed out in the main repository with the repository split.
|
|
0dda7dbb73 |
2012-07-13 02:12:35
|
Code_Defect
|
Fixed
|
tdbc::odbc
|
Uninitialized data causes problem in GetCell
|
The GetCell function in generic/tdbcodbc.c uses the following variables, which are not initialized:
SQLLEN colLen; /* Actual size of the return value, in bytes */
SQLINTEGER colLong; /* Integer value of the column */
SQLBIGINT colWide; /* Wide-integer value of the column */
SQLDOUBLE colDouble; /* Double value of the column */
This causes problems, e.g., at
4143: rc = SQLGetData(rdata->hStmt, i+1, SQL_C_SBIGINT,
(SQLPOINTER) &colWide, sizeof(colWide), &colLen);
if colLen != sizeof(colLong), in which case colLong is not completely set.
See for example this Tcl code:
set stmt [$db_conn prepare {SELECT 1}]
set res [$stmt execute]
$res nextlist row
puts "row: $row"
$stmt close
By adding a couple of printfs to generic/tdbcodbc.c
4172 printf("sizeof(colLong) => %zu\n", sizeof(colLong));
4172 printf(" colLen => %ld\n", colLen);
4173 printf(" colLong => %ld\n", colLong);
I get
sizeof(colLong) => 8
colLen => 4
colLong => 34359738369
row: 34359738369
To fix this, initialize the four variables at the top of this issue.
<hr /><i>kbk added on 2012-07-13 02:11:57 UTC:</i><br />
I strongly suspect that this problem was actually the problem where tdbc was failing to check for bigint support from ODBC prior to transferring bigints through SqlGetData. Nevertheless, in a superabundance of caution I am adding the requested initialisation of output parameters.
<hr /><i>kbk added on 2012-07-13 02:12:35 UTC:</i><br />
Fixed in [b65e45ce102be0cfbd9e8fae787b0f5dfe150c32]
|
|
14dee3be9a |
2012-11-16 20:45:43
|
Incident
|
Closed
|
not_specified
|
postgresql [column] doesn't like bool or boolean
|
the postgresql driver, given a table with a column declared as 'fieldname boolean', '$db columns $t $f' returns {fieldname {name fieldname nullable 1}} where I would expect at least a type boolean element in the dict.
<hr /><i>kbk added on 2012-11-16 20:45:28 UTC:</i><br />
Closing this incident in the main TDBC repository since it is postgresql-specific. It will remain open in tdbc::postgresql until I can verify that it is fixed.
|
|
dd068d5942 |
2012-11-16 20:48:06
|
Code_Defect
|
Closed
|
not_specified
|
tdbc::sqlite3 does not show the data for attached files
|
After [tdbc::sqlite3::connection create db mainfilename] , the db command can execute the SQL command to ATTACH an additional database file, and the tables in the attached file can be used, but the [db tables] and other introspection object commands do not show the additional tables.
The workaround is to get the data from the attachName.sqlite_master table.
<hr /><i>kbk added on 2012-11-16 20:48:06 UTC:</i><br />
This is a sqlite3-specific problem and is being closed in the main tdbc repository with the repository split
|
|
14a8b7c3bd |
2012-07-26 14:04:00
|
Code_Defect
|
Fixed
|
tdbc::mysql
|
package tdbc::mysql fails to load under Fedora 17
|
Under Fedora 17, the mysql libraries are named as:
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.0.0
/usr/lib64/mysql/libmysqld.so.0
/usr/lib64/mysql/libmysqld.so.0.0.1
I had to manually edit mysqlStubInit.c in order to make it work:
static const char* mysqlSuffixes[] = {
"", ".18", ".17", ".16", ".15", NULL
};
The code searches up to version 16.
<hr /><i>jan.nijtmans added on 2012-07-26 14:04:00 UTC:</i><br />
committed to trunk
|
|
0a8fd3f25e |
2012-07-11 22:51:33
|
Build_Problem
|
Fixed
|
not_specified
|
Tdbc_Init() not exported - libtdbc.so not [load]able
|
TDBC fails to build properly on Unices where __attribute__((__visibility__("hidden"))) is supported.
Cause of problem: Tdbc_Init() is defined in tdbc.c with storage class TDBCAPI, which is #defined as MODULE_SCOPE, which is in turn #defined as __attribute__((__visibility__("hidden"))), which means "do not make this symbol visible to dlsym() or ld.so".
That's exactly backwards: extension *_Init routines *must* be visible to dlsym(), so should be declared and defined with storage class DLLEXPORT (not MODULE_SCOPE, not EXTERN, and especially not TCL_STORAGE_CLASS).
<hr /><i>anonymous claiming to be jenglish added on 2012-07-11 21:54:12 UTC:</i><br />
(hope this patch survives fossilization)
--- tdbc.h.broken 2012-07-11 14:13:28.669980232 -0700
+++ tdbc.h 2012-07-11 14:21:15.664986200 -0700
@@ -28,17 +28,7 @@
# endif
#endif
-#undef TCL_STORAGE_CLASS
-#ifdef BUILD_tdbc
-# define TCL_STORAGE_CLASS DLLEXPORT
-#else
-# define TCL_STORAGE_CLASS
-#endif
-
-EXTERN int Tdbc_Init(Tcl_Interp *interp);
-
-#undef TCL_STORAGE_CLASS
-#define TCL_STORAGE_CLASS DLLIMPORT
+DLLEXPORT int Tdbc_Init(Tcl_Interp *interp);
/*
* TDBC_VERSION and TDBC_PATCHLEVEL here must match the ones that
--- tdbc.c.broken 2012-07-11 14:27:13.718553784 -0700
+++ tdbc.c 2012-07-11 14:27:23.367086984 -0700
@@ -191,7 +191,7 @@
*-----------------------------------------------------------------------------
*/
-TDBCAPI int
+DLLEXPORT int
Tdbc_Init(
Tcl_Interp* interp /* Tcl interpreter */
) {
<hr /><i>jan.nijtmans added on 2012-07-11 22:51:33 UTC:</i><br />
Should be fixed now
|
|
d528df190c |
2012-08-07 07:50:04
|
Build_Problem
|
Fixed
|
not_specified
|
Changes to build using makefile.vc
|
Building tdbc and tdbcsqlite3 on windows using makefile.vc had some problems:
- 64 bit compiler not recognised (change needed in tdbc/win/makefile.vc)
- platform not recognised (change needed in tdbc/win/rules.vc)
- MODULE_SCOPE compile error (change needed in tdbcInt.h)
- missing win directory for tdbcsqlite3
I can send the patches and missing tdbcsqlite3/win files, but could not attach them to this ticket.
Jos.
<hr /><i>jan.nijtmans added on 2012-07-17 14:39:45 UTC:</i><br />
I was already working on that ;-)
Everything done for tdbc, not yet for the other sub-packages.
<hr /><i>anonymous added on 2012-07-17 19:55:44 UTC:</i><br />
Thanks Jan, you want the win directory for tdbcsqlite3?
<hr /><i>jan.nijtmans added on 2012-08-07 07:50:04 UTC:</i><br />
Thanks, Jos, for your files.
Please verify that everything is correct now.
|
|
751477d142 |
2012-11-16 20:51:22
|
Code_Defect
|
Closed
|
tdbc::odbc
|
Problem with MS SQL SERVER (via tdbcodbc) stored procedures
|
(Submitted on behalf of a colleague - also mailed to the 'tcl-tdbc' list but that mail doesn't seem to have come through?)
I am using tdbc's odbc driver to work with an MS SQL Server (2008) database. I have run into a problem when writing code to create a stored procedure, specifically w.r.t. the syntax for a procedure's parameters. SQL Server's "CREATE PROCEDURE" syntax (http://msdn.microsoft.com/en-us/library/ms187926%28v=sql.100%29.aspx) requires that a procedure's parameters be declared using the @ symbol preceding the name, e.g. @myvar
Just doing this results in the connection's prepare method returning a statement whose params method returns a dict that has all of the stored procedure's parameters as bound variables. If I precede the parameter specifications with an underscore then the params dict does not contain the parameters, they are not seen as bound variables (b.t.w. this is undocumented) but when executing the statement fails due to the sql command still having the underscore. See examples below.
Thanks
Douglas
<verbatim>
(tools) 5 % set con_str {Driver=SQL Server Native Client 10.0;Server=127.0.0.1\SQLEXPRESS;DATABASE=TDBC;UID=builder;PWD=bob;}
Driver=SQL Server Native Client 10.0;Server=127.0.0.1\SQLEXPRESS;DATABASE=TDBC;UID=builder;PWD=bob;
(tools) 6 % tdbc::odbc::connection create my_mssql_con $con_str
::my_mssql_con
(tools) 7 % set sql_stmt {
> CREATE PROCEDURE [ESS].[sp_commitsinsert]
> @commitRef nchar(64),
> @streamId int,
> @lastCommitId int,
> @events nchar(64),
> @metadata nchar(64) = NULL,
> @snapshot nchar(64) = NULL
> AS
> IF EXISTS (SELECT 1 FROM [ESS].[t_streams_myStore] s WHERE s.streamId = @streamId AND s.lastCommitId != @lastCommitId)
> RAISERROR('Concurrency exception', 0, 0)
> ELSE
> INSERT INTO [ESS].[t_commits_myStore] (commitRef, streamId, lastCommitId, events, metadata, snapshot)
> VALUES (@commitRef, @streamId, @lastCommitId, @events, @metadata, @snapshot)
> }
CREATE PROCEDURE [ESS].[sp_commitsinsert]
@commitRef nchar(64),
@streamId int,
@lastCommitId int,
@events nchar(64),
@metadata nchar(64) = NULL,
@snapshot nchar(64) = NULL
AS
IF EXISTS (SELECT 1 FROM [ESS].[t_streams_myStore] s WHERE s.streamId = @streamId AND s.lastCommitId != @lastCommitId)
RAISERROR('Concurrency exception', 0, 0)
ELSE
INSERT INTO [ESS].[t_commits_myStore] (commitRef, streamId, lastCommitId, events, metadata, snapshot)
VALUES (@commitRef, @streamId, @lastCommitId, @events, @metadata, @snapshot)
(tools) 8 % set stmt [my_mssql_con prepare $sql_stmt]
::oo::Obj22::Stmt::1
(tools) 9 % set param_dict {}
(tools) 10 % set param_dict [$stmt params]
commitRef {name commitRef direction in type wvarchar precision 255 scale 0}
streamId {name streamId direction in type wvarchar precision 255 scale 0}
lastCommitId {name lastCommitId direction in type wvarchar precision 255 scale 0}
events {name events direction in type wvarchar precision 255 scale 0}
metadata {name metadata direction in type wvarchar precision 255 scale 0}
snapshot {name snapshot direction in type wvarchar precision 255 scale 0}
(tools) 11 % set args {}
(tools) 12 % foreach v_name [dict keys $param_dict] arg $args {
> if { ($v_name ne {}) && ([dict get $param_dict $v_name direction] ne "out") } {
> dict set param_dict $v_name $arg
> }
> }
(tools) 13 % puts $param_dict
commitRef {} streamId {} lastCommitId {} events {} metadata {} snapshot {}
(tools) 14 % set resultset [$stmt execute $param_dict]
[Microsoft][SQL Server Native Client 10.0][SQL Server]Incorrect syntax near the keyword 'PROCEDURE'.
[Microsoft][SQL Server Native Client 10.0][SQL Server]Statement(s) could not be prepared.
(executing the statement)
(tools) 15 %
(tools) 15 %
(tools) 15 % set sql_stmt {
> CREATE PROCEDURE [ESS].[sp_commitsinsert]
> _@commitRef nchar(64),
> _@streamId int,
> _@lastCommitId int,
> _@events nchar(64),
> _@metadata nchar(64) = NULL,
> _@snapshot nchar(64) = NULL
> AS
> IF EXISTS (SELECT 1 FROM [ESS].[t_streams_myStore] s WHERE s.streamId = _@streamId AND s.lastCommitId != _@lastCommitId)
> RAISERROR('Concurrency exception', 0, 0)
> ELSE
> INSERT INTO [ESS].[t_commits_myStore] (commitRef, streamId, lastCommitId, events, metadata, snapshot)
> VALUES (_@commitRef, _@streamId, _@lastCommitId, _@events, _@metadata, _@snapshot)
> }
CREATE PROCEDURE [ESS].[sp_commitsinsert]
_@commitRef nchar(64),
_@streamId int,
_@lastCommitId int,
_@events nchar(64),
_@metadata nchar(64) = NULL,
_@snapshot nchar(64) = NULL
AS
IF EXISTS (SELECT 1 FROM [ESS].[t_streams_myStore] s WHERE s.streamId = _@streamId AND s.lastCommitId != _@lastCommitId)
RAISERROR('Concurrency exception', 0, 0)
ELSE
INSERT INTO [ESS].[t_commits_myStore] (commitRef, streamId, lastCommitId, events, metadata, snapshot)
VALUES (_@commitRef, _@streamId, _@lastCommitId, _@events, _@metadata, _@snapshot)
(tools) 16 % set stmt [my_mssql_con prepare $sql_stmt]
::oo::Obj22::Stmt::2
(tools) 17 % set param_dict {}
(tools) 18 % set param_dict [$stmt params]
(tools) 19 % set args {}
(tools) 20 % foreach v_name [dict keys $param_dict] arg $args {
> if { ($v_name ne {}) && ([dict get $param_dict $v_name direction] ne "out") } {
> dict set param_dict $v_name $arg
> }
> }
(tools) 21 % puts $param_dict
(tools) 22 % set resultset [$stmt execute $param_dict]
[Microsoft][SQL Server Native Client 10.0][SQL Server]Incorrect syntax near '_@commitRef'.
[Microsoft][SQL Server Native Client 10.0][SQL Server]Statement(s) could not be prepared.
(executing the statement)
(tools) 23 %
</verbatim>
<hr /><i>anonymous claiming to be twylite added on 2012-11-16 11:41:01 UTC:</i><br />
While pushing TEA build scripts for tdbcodbc I seem to have accidentally pushed the branch 'td-prism-tokenise-mod' as well, which contains our fix for this problem (which is to remove the special behaviour of '@' in tdbcTokenize.c).
<hr /><i>kbk added on 2012-11-16 20:51:22 UTC:</i><br />
This problem is reported against ODBC specifically and is being closed out from the main repository in the repository split.
|
|
dde9dbcb64 |
2012-11-27 16:22:06
|
Build_Problem
|
Closed
|
not_specified
|
No Windows makefile.vc for tdbc-odbc
|
There is no makefile.vc for TDBC-ODBC, so Windows builds are not possible without Mingw32/Cygwin.
Proposed makefile.vc and supporting files committed to branch td-win-tea.
<hr /><i>kbk added on 2012-11-16 20:52:24 UTC:</i><br />
This problem is ODBC-specific and is being closed out from the main repository.
<hr /><i>oehhar added on 2012-11-27 16:22:06 UTC:</i><br />
But where is the place to commit odbc-related issues ?
I have also prepared a makefile.vc and are quite happy with it.
Thank you,
Harald
|
|
e226dbc23c |
2012-12-10 08:03:03
|
Build_Problem
|
Closed
|
tdbc
|
tdbc win/makefile.vc does not install development files
|
When trying to compile tdbc::odbc with msvc, I found the following issues in
win\makefile.vc:
* stub library is not installed
* there are two rules for <b>pkgIndex.tcl</b>: No issue, but leads to a make warning
* header files are not installed
* <b>tdbcConfig.sh</b> is incorrect and not installed
The following patch cures all of them:
* stub library is copied to the same location as the <b>tdbc100.dll</b>.
* header files are copied to the tcl include folder.
The destination folder is build as: <b>$(_INSTALLDIR)\..\include</b>
* <b>tdbcConfig.sh</b> is installed to the same location as <b>tdbc100.dll</b>.
Within the generated <b>tdbcconfig.sh</b> file, the build locations are not usable, because they use relative paths.
There is one slash which should be a backslash, hardcoded in <b>tclconfig.sh.in</b>.
I would appreciate, if someone could verify, if this is correct and if I used the
desired path names.
Thank you,
Harald
<verbatim>
---makefile.vc.patch---
--- C:/test/tcl8.6.0/pkgs/tdbc1.0.0/win/makefile_ori.vc Fri Nov 23 22:46:02 2012
+++ C:/test/tcl8.6.0/pkgs/tdbc1.0.0/win/makefile.vc Tue Nov 27 13:38:26 2012
@@ -227,7 +227,7 @@
BIN_INSTALL_DIR = $(PRJ_INSTALL_DIR)
DOC_INSTALL_DIR = $(PRJ_INSTALL_DIR)
SCRIPT_INSTALL_DIR = $(PRJ_INSTALL_DIR)
-INCLUDE_INSTALL_DIR = $(_TCLDIR)\include
+INCLUDE_INSTALL_DIR = $(_INSTALLDIR)\..\include
### The following paths CANNOT have spaces in them.
GENERICDIR = $(ROOT)\generic
@@ -462,22 +462,22 @@
@TCL_VERSION@ $(TCL_DOTVERSION)
<<
-$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in
- @nmakehlp -s << $** > $@
-
- type << > $@
-if {[catch {package require Tcl 8.5}]} return
-package ifneeded $(PROJECT) $(DOTVERSION) \
- [list load [file join $$dir $(PRJLIBNAME)] $(PROJECT)]
-<<
+.PHONY: $(OUT_DIR)\tdbcConfig.sh
$(OUT_DIR)\tdbcConfig.sh: $(ROOT)\tdbcConfig.sh.in
nmakehlp -s << $** > $@
-@TDBC_LIB_SPEC@ $(PRJLIBNAME)
-@TDBC_STUB_LIB_SPEC@ $(PRJLIBNAME)
-@TDBC_INCLUDE_SPEC@ -I$(LIB_INSTALL_DIR)
-@TDBC_PRIVATE_INCLUDE_SPEC@ -I$(LIB_INSTALL_DIR)
@PACKAGE_VERSION@ $(DOTVERSION)
+@PKG_LIB_FILE@ $(PRJLIBNAME)
+@tdbc_LIB_SPEC@ $(LIB_INSTALL_DIR)\$(PRJLIBNAME)
+@PKG_STUB_LIB_FILE@ $(PRJSTUBLIBNAME)
+@tdbc_BUILD_STUB_LIB_SPEC@ $(PRJSTUBLIB)
+@tdbc_STUB_LIB_SPEC@ $(LIB_INSTALL_DIR)\$(PRJSTUBLIBNAME)
+@tdbc_BUILD_STUB_LIB_PATH@ $(PRJSTUBLIB)
+@tdbc_STUB_LIB_PATH@ $(LIB_INSTALL_DIR)\$(PRJSTUBLIBNAME)
+@tdbc_SRC_DIR@ $(ROOT)
+@tdbc_INCLUDE_SPEC@ -I$(INCLUDE_INSTALL_DIR)
+@tdbc_BUILD_INCLUDE_SPEC@ -I$(GENERICDIR)
+@tdbc_LIB_DIR@ $(LIB_INSTALL_DIR)
<<
$(TMP_DIR)\tdbcStubLib.obj : $(GENERICDIR)\tdbcStubLib.c
@@ -495,12 +495,17 @@
@echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
@if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
@$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+ @$(CPY) $(PRJSTUBLIB) "$(LIB_INSTALL_DIR)" >NUL
-install-libraries: $(OUT_DIR)\pkgIndex.tcl
+install-libraries: $(OUT_DIR)\pkgIndex.tcl $(OUT_DIR)\tdbcConfig.sh
@echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
@if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
@echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
@$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)"
+ @$(CPY) $(OUT_DIR)\tdbcConfig.sh "$(SCRIPT_INSTALL_DIR)"
+ @echo Installing header files in '$(INCLUDE_INSTALL_DIR)'
+ @$(CPY) "$(GENERICDIR)\tdbc.h" "$(INCLUDE_INSTALL_DIR)\"
+ @$(CPY) "$(GENERICDIR)\tdbcDecls.h" "$(INCLUDE_INSTALL_DIR)\"
install-docs:
@echo Installing documentation files to '$(DOC_INSTALL_DIR)'
</verbatim>
|
|
10f9e9c162 |
2012-12-10 08:02:22
|
Code_Defect
|
Closed
|
not_specified
|
tdbc::odbc makefile.vc requires TCL_VERSION_REQ
|
Thank you, Twilite, for the tdbc::odbc makefile
IMHO the macro <b>TCL_VERSION_REQ</b> is required to build the <b>pkgConfig.sh</b> file.
Here is a possible patch:
<verbatim>
--- C:/test/TDBC1.0/tdbcodbc/win/makefile_twilite.vc Tue Nov 27 17:24:46 2012
+++ C:/test/TDBC1.0/tdbcodbc/win/makefile_twilite_n.vc Tue Nov 27 17:29:49 2012
@@ -177,6 +177,9 @@
!if [echo DOTVERSION = \>> versions.vc] \
&& [nmakehlp -V ..\configure.in AC_INIT >> versions.vc]
!endif
+!if [echo TCL_VERSION_REQ = \>> versions.vc] \
+ && [nmakehlp -V ..\configure.in TCL_VERSION_REQ >> versions.vc]
+!endif
!include "versions.vc"
VERSION = $(DOTVERSION:.=)
</verbatim>
Eventually, you could also adjust path management to the patch of this ticket: e226dbc23c
It may eventually be used to locate the header files and stub lib of tdbc.
Thank you,
Harald
|
|
d1ad7f4948 |
2017-12-15 21:48:27
|
Code_Defect
|
Open
|
not_specified
|
odbc::sqlite table subcommand has trailing space in type value
|
|
b6ac73ed3b |
2012-11-29 16:25:04
|
Feature_Request
|
Open
|
|
tdbc::sqlite3 does not return described error states
|
|
05d96953e1 |
2012-11-29 16:33:41
|
Feature_Request
|
Open
|
tdbc::sqlite3
|
tdbc::sqlite3 does not support schematas
|
|
491a0e30c4 |
2017-12-12 19:42:11
|
Code_Defect
|
Closed
|
not_specified
|
tdbc::mysql needs trim function to retrieve integers
|
|
cf073c38f2 |
2017-05-25 16:13:06
|
Documentation
|
Closed
|
not_specified
|
tdbc::resultset documentation typo
|
|
00b7928298 |
2014-10-23 19:23:00
|
Documentation
|
Closed
|
not_specified
|
Put .TH before macros
|
|
fbcd8d40f1 |
2015-04-27 00:58:31
|
Code_Defect
|
Open
|
not_specified
|
tdbc consults INFORMATION_SCHEMA without filtering for the target table's schema (foreignkeys, primarykeys methods affected)
|
|
68607299f7 |
2015-06-26 23:05:40
|
Build_Problem
|
Review
|
tdbc
|
tdbc_LIB_DIR not being substituted properly in tdbcConfig.sh
|
|
625f0ee464 |
2018-01-05 05:56:07
|
Code_Defect
|
Closed
|
tdbc
|
Disable writing to build-dir at install time
|
|
6af4223559 |
2015-07-08 14:55:44
|
Code_Defect
|
Open
|
not_specified
|
if [package require tdbc::*] fails to load a DLL, it should clean up
|
|
c429de3d3f |
2015-10-13 13:27:59
|
Code_Defect
|
Closed
|
not_specified
|
[package require tdbc] fails in all driver test suites
|
|
c3433a067d |
2016-02-18 20:37:57
|
Code_Defect
|
Closed
|
not_specified
|
typo: tdbc_BUIID_LIB_SPEC
|
|
907989fb78 |
2015-11-19 04:01:26
|
Code_Defect
|
Open
|
|
tdbcpostgres.tcl namespace eval
|
|
0302d63e13 |
2017-02-22 02:07:26
|
Documentation
|
Open
|
|
documentation of tdbc::statement paramtype is incorrect
|
|
5f95cdd83c |
2017-05-04 18:53:56
|
Code_Defect
|
Closed
|
not_specified
|
configure error due to install directory not existing
|
|
6827edbee9 |
2018-04-25 08:10:59
|
Code_Defect
|
Open
|
tdbc::odbc
|
incorrect value returned from tdbc::odbc
|
|
b4029dc351 |
2019-08-29 11:04:57
|
Feature_Request
|
Closed
|
tdbc
|
make all TDBC API functions MODULE_SCOPE
|
As a follow-up to [Tcl FRQ 3010352],
Objective: simplify Stubs by
- exporting only the minimally needed symbols, i.e.
only Tdbc_Init, nothing more.
- Eliminate the need for -DUSE_TDBC_STUBS
For TclOO, this is already done, I have a
corresponding patch for Tdbc available.
<hr /><i>anonymous added on 2011-11-07 10:05:24 UTC:</i><br />
Implementation available now in branch rfe-b4029dc351
Kevin, is this suitable for the next beta?
Jan Nijtmans
<hr /><i>jan.nijtmans added on 2012-06-10 20:11:21 UTC:</i><br />
Now tested on Windows and UNIX, should work fine on all platforms
|
|
d6c4db2556 |
2019-08-30 08:19:16
|
Build_Problem
|
Open
|
tdbc
|
makefile.vc: compile tdbcStubLib.c with -DTCL_USE_STUBS to not make tdbcodbc.dll dependent on tcl86t.dll
|
|
38d73b590f |
2019-10-22 15:32:55
|
Feature_Request
|
Open
|
|
Retrieving something comparable to ResultSetMetaData (JDBC) with TDBC
|
|
1a26b401c2 |
2020-02-07 11:25:21
|
Documentation
|
Open
|
|
tdbc::connection documentation missing text for tables and columns commands
|
|
41bc4f77ba |
2020-02-07 11:27:47
|
Documentation
|
Open
|
|
Documentation for tdbc::mysql contains extraneous commands in synopsis
|
|
dab3f4a37d |
2022-01-15 17:30:54
|
Code_Defect
|
Closed
|
not_specified
|
tdbc::mysql: add support for MariaDB client
|
|
8c50bc2329 |
2022-01-15 17:33:28
|
Build_Problem
|
Closed
|
not_specified
|
Tag release 1.1.2
|
|
231bf99be2 |
2022-05-23 14:21:22
|
Build_Problem
|
Closed
|
not_specified
|
nmake does not make tdbcUuid.h
|
|
e01b2f25f9 |
2022-11-20 18:45:50
|
Build_Problem
|
Closed
|
tdbc
|
Tdbc 1.1.5 dist tarball has manifest.uuid in the wrond place
|
|
feae709a44 |
2023-05-22 12:53:30
|
Code_Defect
|
Review
|
tdbc
|
missing tclconfig/install-sh file
|
|
219e90475a |
2023-06-23 06:47:39
|
Code_Defect
|
Open
|
|
pkgIndex.tcl for non-shared build
|
|
66bef3367c |
2023-09-14 16:00:13
|
Code_Defect
|
Closed
|
not_specified
|
tdbc::mysql: segmentation fault if mysql client lib is not found
|
|
ced6525570 |
2023-12-11 11:31:00
|
Build_Problem
|
Closed
|
tdbc
|
nmake x86: names tdbcstub.lib, tdbc-odbc looks for tdbcstub116.lib + undefined @tdbc_BUILD_LIB_SPEC@ in dbcConfig.sh
|
|
2e1e5de4e1 |
2023-12-15 18:53:03
|
Build_Problem
|
Open
|
|
configure warnings in tcl/pkgs setting
|