Re: [sqlite] 500 sqlites on one server machine?
ye, at the fifth question of the SQLite FAQ, at http://www.sqlite.org/faq.html, it is explained why using a sqlite file by multiple nodes over a network with a NFS filesystem is not a good idea. I would avoid it although the FAQ does not say 'it does not work', it only says 'it might not work'. You might want to take a look at GlusterFS (www.glusterfs.org), it's a clustered filesystem that works well with fcntl() (the locking system). If you need a smaller latency, it will also work with infiniband. Best regards, Daniel Colchete ye wrote: > Hi, Igor: > Thanks for reply! > Yes, I just noticed the sqlite data file is nothing but a empty file. > Thanks! > About the remote visit, if the sqlite data file is created on a NFS, will > the remote visiting process be considered as a equal local process? > > regards > ye > > ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Ignoring "The"
Andrew Gatt wrote: > I have a table of music artist names which i'd like to output in order. > Normally i just use: > > select * from artists order by artist_name; > > What i'd really like to do is order the artists by name but ignore any > "the" or "the," preceding it. > > Any ideas? > > Thanks > > Andrew > ___ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > > Store it like "Beatles, The" them make the transformation latter, if necessary? That's one idea. Best, Daniel ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] UTF8
Cesar David Rodas Maldonado wrote: > I wanted to ask how can i know if a given text is UTF8 or ISO-8859-1? Well, there might be a way if you only want to know if the text is UTF-8 or ISO-8859-1 (it means that you already know that is one is the other). There are some invalid UTF-8 sequences. If you have something like 0xE5 0x61, that in ISO-8859-1 means 'áa' = 'áa', you have an invalid UTF-8 sequence and then you know that it is not an UTF-8 charset. How do you test it? If you're using Linux you can try to convert your string from UTF-8 to UTF-16 using glibc's iconv. If it is an ISO-8859-1 text and you are lucky enough to be an invalid UTF-8 (most likely) then you have it! If you are not using Linux then you should learn how unicode chars are encoded in UTF-8 (like in http://en.wikipedia.org/wiki/UTF-8) to make your own algorithm. There is a very good chance it will work fine for you. Every ISO-8859-1 document with non-ASCII chars I try to open with UTF-8 editors gives me errors. What do you think? Besides that, I know that there are a few probabilistic methods to determine the charset a text is encoded. Mozilla Firefox uses them a lot. There are many papers on this subject on the internet. Google is your friend. Best regards, Daniel Colchete
[sqlite] sqlite3_prepare = SQLITE_BUSY????
Hello people! First of all: SQLITE 3.3.6 with Gentoo Linux (updated) I was trying to understand why would a sqlite3_prepare return SQLITE_BUSY. I read the code at prepare.c and tokenize.c but I didn't find anything. When can a sqlite3_prepare (with a "select * from table where field1=? and field2=?") returns SQLITE_BUSY? Best regards, Daniel Colchete
Re: [sqlite] A littel question...
Cesar, in that case Clay Dowling's answer says it all: it's faster to use an hash as an index preloading all your data into your RAM memory (without SQLite), but if you don't want to use that amount of memory then you could use an INDEX that will create a Binary Tree (=btree) that will make your search faster. Best regards, Daniel Colchete Cesar David Rodas Maldonado wrote: > I know that, but I would like to know if will be better first > transform the > word into a number (a hash function), after that select the number and > after > search with the index of the word... > understand?. I am sorry for my english... > > On 7/21/06, Daniel van Ham Colchete <[EMAIL PROTECTED]> wrote: >> >> Cesar David Rodas Maldonado wrote: >> > Hello to everybody >> > >> > If I have a table with 100.000 unique words I am wondering if SQLite >> > select >> > if faster an cheaper (RAM, Processor, etc), or If i have to help >> SQLite >> > using a Hash function, and what could be that Hash function? >> > >> > Thanks. >> > >> Cesar, >> >> you should consider using an index: >> http://www.sqlite.org/lang_createindex.html >> >> Best regards, >> Daniel Colchete >> >> >
Re: [sqlite] A littel question...
Cesar David Rodas Maldonado wrote: > Hello to everybody > > If I have a table with 100.000 unique words I am wondering if SQLite > select > if faster an cheaper (RAM, Processor, etc), or If i have to help SQLite > using a Hash function, and what could be that Hash function? > > Thanks. > Cesar, you should consider using an index: http://www.sqlite.org/lang_createindex.html Best regards, Daniel Colchete
Re: [sqlite] Using prepare, step, finalize and handling BUSY answers
Jay Sprenkle wrote: >> Jay, thank you very much man! That answers a lot. And it showed me that >> I was not checking the SQLITE_LOCKED case. >> >> But, from what I can see, if your database is busy or locked you just >> stop your program execution, or you will end this function WITHOUT >> running neither sqlite3_finalize nor sqlite3_close. Either way you will >> have a memory leak and this is not a good thing when you're running an >> daemon (my case). >> >> What if you put an loop = false instead of the throw at the 'default' >> case? Do you have to you use sqlite3_interrupt before sqlite3_finalize? > > This code was for a benchmark so I wasn't careful to check for locking > and do good error recovery. You're correct, and all your suggestions > should be put in. You'll have to decide what's an appropriate error > response for your daemon. > > I usually use the assumption none of the applications using the database > will keep it locked for long periods. So retrying for a small time > after a lock return > works well for me. > That's what I think as well. But, when you say 'all your suggestions' are you talking about sqlite3_interrupt too? Best r. Daniel Colchete
Re: [sqlite] Using prepare, step, finalize and handling BUSY answers
Jay Sprenkle wrote: > Here's some example code: > > sqlite3*db; > > // connect to database > if ( sqlite3_open( "test.db", &db ) ) > throw "Can't open database"; > > char* sql; > > // two forms of the same sql > sql = "SELECT one.test1, two.test2" > " FROM one" > " INNER JOIN two ON one.id = two.id" > ; > sqlite3_stmt* pStmt; > > if ( sqlite3_prepare( db, sql, strlen(sql), &pStmt, NULL ) != SQLITE_OK ) > { > string str = "Cannot prepare sql: "; > str += sql[t]; > str += ", Error: "; > str += sqlite3_errmsg(db); > throw str.c_str(); > } > > bool Loop = true; > while ( Loop ) > switch ( sqlite3_step( pStmt ) ) > { > case SQLITE_ROW: >// retrieve the results >char* p = (char *) sqlite3_column_text( pStmt, 0 ); >string test1 = string( p ? p : "" ); > >p = (char *) sqlite3_column_text( pStmt, 1 ); >string test2 = string( p ? p : "" ); > >break; > case SQLITE_DONE: >Loop = false; >break; > case SQLITE_BUSY: > case SQLITE_LOCKED: > default: >string str = "Cannot execute sql: "; >str += sql[t]; >str += ", Error: "; >str += sqlite3_errmsg(db); >throw str.c_str(); >break; > } > > // clean up when finished > sqlite3_finalize( pStmt ); > > sqlite3_close( db ); Jay, thank you very much man! That answers a lot. And it showed me that I was not checking the SQLITE_LOCKED case. But, from what I can see, if your database is busy or locked you just stop your program execution, or you will end this function WITHOUT running neither sqlite3_finalize nor sqlite3_close. Either way you will have a memory leak and this is not a good thing when you're running an daemon (my case). What if you put an loop = false instead of the throw at the 'default' case? Do you have to you use sqlite3_interrupt before sqlite3_finalize? Best regards, Daniel Colchete
[sqlite] Using prepare, step, finalize and hadling BUSY answers
Hello everyone, I'm new on this list and I have only a few months of experience with SQLITE. I use SQLITE 3.3.6 for Linux with C++. I'm having a few problems with locking. But before describing the problem itself, I would like to check if I'm doing something wrong. That's what I do when I try to INSERT something in my database: PREPARE BIND EC = STEP while EC = BUSY { TRY AGAIN 10 TIMES; // SQLITE is set to sleep 1 sec if BUSY. IF TIME > 10 { BREAK; } } And then I do some other selects and inserts. Now I read that there is another function I should be using: sqlite3_finalize. From what I understood I should be doing: PREPARE BIND EC = STEP while EC = BUSY { TRY AGAIN 10 TIMES; // SQLITE is set to sleep 1 sec if BUSY. IF TIME > 10 { BREAK; } } FINALIZE Am I right? Question: what if a PREPARE returns BUSY? What should I do? Why would a PREPARE return BUSY? I'm having problems understanding the SQLite docs. At the 'C/C++ Interface for SQLite Version 3' it says that sqlite3_exec is a wrapper to 'prepare, finalize, reset' without a step. But a little bit down the document it says you should use and step. But again, what if I don't want to wait the busy state anymore? Should I use finalize or interrupt and then finalize? Thank you very much for your help! Best regards, Daniel Colchete