World: r3wp
[SQLite] C library embeddable DB .
older newer | first last |
Robert 31-Mar-2008 [705] | So, getting a database system that has much better / native Rebol support makes a lot of sense. Hopefully such a system will once be implemented on the C level for good performance etc. |
Ashley 7-Apr-2008 [706] | Will, did you try modifying the following lines in the driver: *lib: load/library ... ; to call the correct version *prepare: make routine! ... ; to use "sqlite3_prepare_v2" instead of "sqlite3_prepare" |
Will 7-Apr-2008 [707x2] | Thank you Ashley, have changed to v2 but get: |
connect/log/create d ** User Error: SQLite out of memory ** Near: make error! reform ["SQLite" error] | |
Ashley 7-Apr-2008 [709] | Are you able to connect to an existing db file? |
Louis 8-Sep-2008 [710] | rebview cl-sqlite.r Any idea why I'm getting this (using Ubuntu and Ashley's sqlite.r): Script Error: Library error: libsqlite3.so: cannot open shared object file: No such file or directory ** Near: *lib: load/library switch/default fourth system/version >> |
Chris 8-Sep-2008 [711] | Do you perhaps need the sqlite library in your working folder? |
Louis 8-Sep-2008 [712x3] | This solved the problem: "sudo apt-get install libsqlite3-dev" |
Chris, you are right. Thanks! | |
How can I do an "if not exists? on a sqlite table? | |
Chris 8-Sep-2008 [715] | All the tables are stored in the 'sqlite_master' table (including the 'Create' command) |
Chris 9-Sep-2008 [716] | select name from sqlite_master where type = 'table' and name = ? |
Louis 9-Sep-2008 [717] | Thanks, Chris. I have this working now. |
sqlab 19-Sep-2008 [718x2] | What is the recommendet way to deal with a lock and to get rid of dat-journal? I do not like to stop all processes and to manually remove the file. Also to increase the retries has its limitations. So, how do you handle the problem? |
Ok, got it. I increased the retries and use a shorter wait with a random duration If there is still a lock, I use an sqlite/*step sqlite/sid | |
james_nak 9-Oct-2008 [720] | I found something odd with an app I'm writing. If I insert or update a field (varchar) with a string that has any spaces in it. , it throws a rebol error if I try to select it. For example, I have a string "OK BOb" stored and when I sql {select * from vocab} ** Script Error: OK has no value ** Where: rejoin ** Near: OK BOb It doesn't matter what the first word is. I can't believe I'm the only one so I must be doing something wrong. |
Pekr 9-Oct-2008 [721x2] | how do you connect to DB? There are two modes - normal, and /direct .... |
try to open it with /direct refinement ... | |
james_nak 9-Oct-2008 [723x3] | I just use "connect %dbname.db |
OK, I'll try that. | |
How did you know? | |
SteveT 9-Oct-2008 [726] | Hi all, is the SQLite driver for REBOL different to the standard in that it has locking working? Does this mean it can be used for small multi-user apps or is it that people DO but SHOULDN'T like with Access? Thanks |
james_nak 9-Oct-2008 [727x3] | I see.../direct "Do not mold/load REBOL values" |
Says: # Lock detection The driver detects locks and initiates retries on your behalf. @ http://www.dobeash.com/sqlite.html Though I have not tried it in multi-user env. | |
Thanks Pekr for the good advice. | |
SteveT 9-Oct-2008 [730] | thanks, I have the mySQL driver working but I was just mewsing at not having to have a WAMP deployment. |
james_nak 9-Oct-2008 [731] | Yes, far (outside of my ignorance above) it works quite well. |
Ashley 10-Oct-2008 [732] | SteveT: read http://www.sqlite.org/lockingv3.htmlfor more information on locking, especially the section titled, "6.0 How To Corrupt Your Database Files". |
SteveT 11-Oct-2008 [733] | Thanks Ashley |
sqlab 12-Oct-2008 [734] | I made a few tests with sqlite and concurrent processes writing and manual reading. I can not recommend it, if you cannot accept data loss under these circumstances. Sooner or later it will get in an inconsistent state. |
SteveT 12-Oct-2008 [735] | Thanks for the info |
Ashley 12-Oct-2008 [736x2] | Were the problems you experienced REBOL or SQLite related? See http://www.rebol.net/cgi-bin/rambo.r?id=4063& |
problem does not occur if a periodic recycle is performed should read "problem occurs less frequently if a periodic recycle is performed" | |
sqlab 13-Oct-2008 [738] | I experienced the problems Rebol and Sqlite related. Rebol crashed soon trying to read after recovering from a lock, as the written data were no more consistent. |
GiuseppeC 15-Oct-2008 [739x2] | Hello, I need to implement a database with over 500 rows and I think SQLLite is the riight solution. Speed is much important as I need to perform about 20 queries each second. Is it loaded in memory ? Is there a way to load the database in memory ? |
(*over 500K rows) | |
Maarten 15-Oct-2008 [741x2] | What's the size of each row? Given the size/price of memory, REBOL may be fast enough by itself. If you use sort, parse and create a little list comprehension dialect... |
500k rows, every 2 bytes per row makes your DB grow by 1 MB. Now if your average size is 2KB/row, you'll use 1Gb of memory (this REBOL independent). Doable | |
GiuseppeC 15-Oct-2008 [743x2] | It should be 0,5 KB per row. |
So the database will be around 250MB. Is SQL Lite disk based or could we instruct it to load the database in memory ? | |
Pekr 15-Oct-2008 [745] | IIRC it allows also in-memory tables, but not 100% sure ... |
Henrik 15-Oct-2008 [746] | The trouble for REBOL starts when you want to save the db to disk or load it into memory. You'll have to implement a clever algorithm to make it fast. |
Maarten 15-Oct-2008 [747x2] | I think you should try parse on a large file with /seek, just to test. Or load it in memory upfront, so you hav the cost once. |
I mean, 250Mb is not so much. Only 1000 times the rebol executable | |
Ashley 15-Oct-2008 [749] | RebDB is memory-based, or if your DB structure and access is simple enoiugh just use sorted blocks. You really only *need* a DB if you require a complex access API such as SQL. |
Robert 16-Oct-2008 [750] | SQLite can use in memory tables. If persistens is not an issue and you just need to query and not changes are necessary SQLite is a good catch. But if your queries are very simple lookup and don't change in structure load everything and write a simple accessor function. |
Ashley 17-Oct-2008 [751] | How would I add the following routine to sqlite.r: SQLITE_EXTERN const char sqlite3_version[]; I've tried: *version: make routine! [return: [string!]] *lib "sqlite3_version" but that doesn't seem to work. |
BrianH 17-Oct-2008 [752] | Routines only work for functions, not constants or variables. Is there a function that returns the value of that constant? |
Ashley 17-Oct-2008 [753] | const char *sqlite3_libversion(void); sqlite3_libversion() function returns a pointer to the sqlite3_version string constant. int sqlite3_libversion_number(void); sqlite3_libversion_number() interface returns an integer equal to SQLITE_VERSION_NUMBER. |
Robert 18-Oct-2008 [754] | What do you get back? This should work. |
older newer | first last |