World: r3wp
[SQLite] C library embeddable DB .
older newer | first last |
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. |
older newer | first last |