r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[SQLite] C library embeddable DB .

Ingo
25-Jun-2006
[393x2]
aaahhh, once again, I forgot /direct in my testing on the console
I'll try to find a minimal code to show the non-catched errors ...
Ingo
28-Jun-2006
[395]
Hi Ashley, while trying to find a minimal code example ... I found 
the error ... ;-) 

That's the error message ...
** User Error: SQLite SQL logic error or missing database
** Near: make error! reform ["SQLite" error]

And it was caused by:

      if string? face/user-data [
         if error? set/any 'err try [

            set pAddress-disp first rule compose [pAddress get guid = (face/user-data) 
            *]
	; rule creates an sql string and starts calls 'sql with it
	; yadda yadda yadda ...
         ]
      ][probe disarm err]

Do you find the error??? 

Somehow the [probe disarm err] block moved to the wrong if ... 


I don't know how this could trigger _this_ error, but after I moved 
the block the error has not occurred again.
Volker
28-Jun-2006
[396]
can you try not to probe? Maybe printing somehow interferes with 
dll?
Pekr
1-Aug-2006
[397x5]
I have one suggestion. Trying to use sqlite for cgi, I have following 
dir structure:

\app
app.cgi

\app\system (sqlite.r, sqlite.dll, other app related "system" files)
\app\data (*.db)


I don't like sqlite driver putting .log file into caller directory 
= main app directory. Not sure where it belongs, if in \system, \data, 
or simply \log subdir, but the driver has no ability to set the path 
...
I thought that the same parameter could be used for DBs too - setting 
the path, but it is not so important, as I can connect %path-to-db/my-db.db, 
but as for logging, it just writes to "current dir"
I did following modifications to driver:

log-path: to-file copy ""

then replace/all "%sqlite.log" "join log-path %sqlite.log"


then in my cgi script I am able to do sqlite/log-path: %db/ to change 
location ...... maybe it would be usefull to even set db path and 
don't bother with paths, not sure ....
hmm, not sure I easily follow how dbs are opened in 'connect, so 
I skip the change to set path for dbs thru some variable ....
I don't understand the line: unless find first database %/ [insert 
first database what-dir], as it just changes path to first file, 
is that ok?
Ashley
1-Aug-2006
[402]
sqlite open command expects a fully qualified local file name ... 
the line in question prepends the supplied file name with current 
dir unless the file name is in fact a path.
Pekr
1-Aug-2006
[403x2]
ok, and when you open multiple databases as with connect [%my-db.db 
%my-db2.db] ?
my understanding is, that then only first db gets path appended?
Ashley
1-Aug-2006
[405x2]
Look about 12 lines further down in the code ... the same logic is 
applied to each db after the first.
The log-path issue is best resolved by adding a log-file word to 
the sqlite context that defaults to %sqlite.log. You can then do 
the following in your code:

	sqlite/log-file: %my-path/my-log-file.log
Pekr
1-Aug-2006
[407x4]
I did something similar, as above ....
Ashley - I have problems with writing permissions under Linux. Till 
I resolve it, I wanted to disable logging. I looked at the driver 
and I can see, there is a word - log?: false, but when you try to 
write to log, you don't test for it. Is that ok, or is that variable 
for any other purpose of logging?
OK, maybe it is just me, but I can't get enough permission for my 
CGI, even if run in -cs mode, for sqlite.log to be written to (the 
script works in console though, but I am root there, so ...). Could 
the driver be updated to work with log?: false variable? I can see 
logging on four places, but only on one place (sql function) it ever 
checks the variable ....
sqlite is cool, so imo it would be pitty if it would not easily work 
in cgi environment .... if there is something wrong with my set-up, 
then sorry.....
Ashley
2-Aug-2006
[411]
From the User Guide: "Every connect, disconnect, error and statement 
retry is logged to %sqlite.log. This refinement adds SQL statements 
as well. While this can be useful to monitor what SQL statements 
are being issued and what the volume and distribution is; be sure 
to monitor the size of this file in high transaction environments."


If you really don't want any log output then just direct it to /dev/null
Pekr
2-Aug-2006
[412x4]
what is log?: false good for, then?
ah, so this variable applies only to disable/enable logging of sql 
statements, right?
anyway - inability to work directly in cgi mode will drive ppl away 
from driver usage .... Logging should be disabled by default imo, 
and the name of the variable suggests that too ....
the log can't be used for rollbacks anyway, can it? (so not so important)
Pekr
18-Sep-2006
[416x5]
Hi, I know that some talk of encryption was held here some time ago, 
but currently I was asked to eventually protect sqlite data and I 
am not sure what is correct aproach. I would not go DB-as-a-file 
encryption, then "unpacking" into memory, or so. I prefer app level 
encryption, but I am not sure about searches, using LIKE directive. 
Would it work?
hmm, would be problematic ....
>> (encloak "3" "pass") > (encloak "2" "pass")
== false
>> "3" > "2"
== true
the proper encryption would have to come at lower db level, namely 
- storage level ....
that is nearly useless then, because there is no easy way of how 
to protect your data
BrianH
18-Sep-2006
[421]
I think that SQLite itself can be extended with encrypted fields.
Pekr
18-Sep-2006
[422x2]
hmm, author offers kind of extension for 2000USD .... there is no 
way how poor pekr would know C code to the extent of writing such 
an extension myself :-)
but I found - http://sqlite.phxsoftware.com/
Robert
18-Sep-2006
[424x3]
I haven't given this ADO stuff a try to see if it fits my requirements. 
But will do so.
At the moment I tend to use the 2K$ extension. Yes, not quite cheap 
and I might do it myself but it will take some time too. So not being 
cheaper.
The strategy is to en/decrypt every block that gets written to disk. 
Even all B*-tree stuff etc. with this it's fully transparent to the 
database engine.
BrianH
18-Sep-2006
[427]
It appears that the SQLite version at Petr's link will work without 
ADO if you want to use the traditional APIs.
Pekr
18-Sep-2006
[428x2]
I can't install it, need to download .NET framework first, will do 
so at home :-)
how much slower the encrypted db is?
BrianH
18-Sep-2006
[430]
You can run it without the .NET framework.
Pekr
18-Sep-2006
[431]
yes, but binary dll comes in installer .msi, and it refuses to run, 
unless you have .NET installed, but that is detail :-)
BrianH
18-Sep-2006
[432]
Why wouldn't you have .NET installed? There are so many good apps 
that use it...
Pekr
18-Sep-2006
[433x4]
I known none - NET is crap :-)
it means - I use many fine apps, yet it is not on my PC ....
ppl should use technology where appropriate - ATI uses it for Control 
Center, it takes 96MB of RAM ... for what? To configure driver in 
nice juicy, painfully slow environment? Well, at least on 850MHz 
Duron, 256MB RAM, it took some 20 - 30 sec to appear :-)
hopefully at home, with my XP, it is already installed, so will try 
it at home ...
BrianH
18-Sep-2006
[437]
.NET is less crappy than Win32, believe me. I've written for both. 
I agree about ATI's control center though.
Robert
18-Sep-2006
[438]
Performance will be about 50% without encryption for the SQLite extension. 
But I don't think that it's that much. Reading/writing to disk is 
a lot slower compared to execution speed of processors. So, I expect 
about 25% performance loss.
Pekr
18-Sep-2006
[439]
is .NET complete API replacement for Win32? I thought it is kind 
of virual machine (competition to JAVA), and hence for kind of internet 
ready apps, but not system wide apps?
Robert
18-Sep-2006
[440x2]
It will become a replacement over time.
Anyway, I read it that .NET isn't required. So, it should be a drop-in-replacement. 
The only thing I don't know is, how to access the exteneded functions 
than.
BrianH
18-Sep-2006
[442]
There is a virtual machine, but the code you run is native code by 
the time you run it. All new APIs for Windows are built on .NET.