thx but how do you know in your vt_filter function :

int vt_filter( sqlite3_vtab_cursor *cur,
int idxNum, const char *idxStr,
int argc, sqlite3_value **argv ){

that argv[0] is column index 4 by example ?

Micka,




On Fri, Jul 4, 2014 at 12:17 PM, Hick Gunter <h...@scigames.at> wrote:

> AFAIKT you currently have two supported operation modes:
>
> a) full table scan
> b) access via exact ID
>
> To implement a) you should make p_info->estimatedCost be the number of
> rows in your table (I suggest leaving p_info->idxNum as 0).
>
> To implement b) you need to check for a constraint with
>         - iColumn == index of your ID column
>         - op == SQLITE_INDEX_CONSTRAINT_EQ
>         - usable != 0
> In that case you need to set p_info->estimatedCost to 1 (you will be
> retrieving only this row), argvIndex to 1, omit to 1 and p_info->idxNum to
> something different (I suggest -1).
>
> You can begin thinking about range scans and index scans later.
>
>
> -----Ursprüngliche Nachricht-----
> Von: Micka [mailto:mickamus...@gmail.com]
> Gesendet: Freitag, 04. Juli 2014 11:54
> An: General Discussion of SQLite Database
> Betreff: Re: [sqlite] Error xBestIndex returned an invalid plan
> Hi,
>
> Thx for this constructive message ;)
>
> I don't have a lot of experience with the this part of Sqlite which is
> very powerful !
>
> In the xbestIndex function i'm using only this line  :
>
> p_info->idxNum=p_info->aConstraint[0].iColumn;
>
> Because in my xfilter function I needed to know the index of the first
> column.  ( do you know a better way to do that ? )
>
>
> and
>
> p_info->idxStr=p_vt->acNameTab;
>
>
> This part was in case I needed to know the name of my table ... But I
> don't really need it, because I'm using sqlite3_vtab *p_svt to store the
> extra data that I need.
>
>
> That part :
> for(i=0;i<p_info->nConstraint;i++){
> if(p_info->aConstraint[i].usable){
> p_info->aConstraintUsage[i].argvIndex=j++;
> }
> }
>
> is to give the order of index . Because the role of this function is to
> give the order of index right ?
>
>
> In my xFilter function I'm detecting if the column index giving by idxNum
> is the ID of my table. If it is, I'm positioning the cursor at the correct
> position. IF the index of the column is different of ID, I'm positioning
> the cursor at the beginning of my table.
>
> YES, it's not perfect, but most of the time it works ^^ .
>
> you said :
>
> But how are you telling your vt_filter function which fields the passed
> values belong to?
>
>
> for the moment I'm only using the first column. most of the time it's the
> ID.
>
>
>  I don't see how the column number of the first constraint - usable or
> not- is going to be sufficient information. Neither is there a check for
> the type of operation requested taken into account.
>
>
> Yes I will have to improve it .
>
>
> Since your filter/next functions are probably going to return arbitrary
> records, the fact that you are not setting any "omit" flags allows SQLite
> to recheck the conditions and return something vaguely resembling the
> correct result set. Just with a lot of work filtering out superfluous
> records and missing any records that should have been returned by
> filter/next (but were not).
>
> Yes I have to improve that too ^^
> I don't know why I should use omit ? When do you need it ? Sorry ... I'm a
> beginner ..
>
>
> Also, you are writing the field aOrderBy, which is documented to be an
> input field.
>
> thx, I've deleted it !
>
>
> Micka,
>
>
> On Fri, Jul 4, 2014 at 11:20 AM, Hick Gunter <h...@scigames.at> wrote:
>
> > As you noticed, you were asking to have the values of unusable
> > constraints passed to your vt_filter function.
> >
> > But how are you telling your vt_filter function which fields the
> > passed values belong to? I don't see how the column number of the
> > first constraint
> > - usable or not- is going to be sufficient information. Neither is
> > there a check for the type of operation requested taken into account.
> >
> > Since your filter/next functions are probably going to return
> > arbitrary records, the fact that you are not setting any "omit" flags
> > allows SQLite to recheck the conditions and return something vaguely
> > resembling the correct result set. Just with a lot of work filtering
> > out superfluous records and missing any records that should have been
> > returned by filter/next (but were not).
> >
> > Also, you are writing the field aOrderBy, which is documented to be an
> > input field.
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Micka [mailto:mickamus...@gmail.com]
> > Gesendet: Freitag, 04. Juli 2014 09:57
> > An: General Discussion of SQLite Database
> > Betreff: Re: [sqlite] Error xBestIndex returned an invalid plan
> >
> > Ok I looked at the source sqlite3.c and saw that :
> >
> >
> >
> > This is my correction :
> >
> >
> > int vt_best_index(sqlite3_vtab *p_svt, sqlite3_index_info *p_info){
> > sVTAB* p_vt         = (sVTAB*)p_svt;
> > int i;
> > int j=1;
> > printf("vt_best_index %d\n", p_info->nConstraint);
> >
> > p_info->idxNum=0;
> >
> > if(p_info->nConstraint!=0){
> > p_info->idxNum=p_info->aConstraint[0].iColumn;
> > p_info->idxStr=p_vt->acNameTab;
> > printf("best index constraint column %d\n",
> > p_info->aConstraint[0].iColumn); for(i=0;i<p_info->nConstraint;i++){
> >  *if(p_info->aConstraint[i].usable){*
> > p_info->aConstraintUsage[i].argvIndex=j++;
> > }
> > }
> > }
> > if(p_info->nOrderBy==0){
> > p_info->aOrderBy=NULL;
> > }
> > return SQLITE_OK;
> > }
> >
> > Thx every one ! And Keith Medcalf ... you should use your time better !
> >
> >
> > Micka,
> >
> >
> > On Fri, Jul 4, 2014 at 9:49 AM, Micka <mickamus...@gmail.com> wrote:
> >
> > > I've no word for this ! .....
> > >
> > >
> > > On Fri, Jul 4, 2014 at 9:46 AM, Keith Medcalf <kmedc...@dessus.com>
> > wrote:
> > >
> > >>
> > >> The spacing and indentation are atrocious?
> > >>
> > >> >-----Original Message-----
> > >> >From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users-
> > >> >boun...@sqlite.org] On Behalf Of Micka
> > >> >Sent: Friday, 4 July, 2014 01:29
> > >> >To: General Discussion of SQLite Database
> > >> >Subject: [sqlite] Error xBestIndex returned an invalid plan
> > >> >
> > >> >Hi, I wanted to know what could be wrong with :
> > >> >
> > >> >int vt_best_index(sqlite3_vtab *p_svt, sqlite3_index_info *p_info){
> > >> >sVTAB* p_vt         = (sVTAB*)p_svt;
> > >> >int i;
> > >> >printf("vt_best_index %d\n", p_info->nConstraint);
> > >> >
> > >> >p_info->idxNum=0;
> > >> >
> > >> >if(p_info->nConstraint!=0){
> > >> >p_info->idxNum=p_info->aConstraint[0].iColumn;
> > >> >p_info->idxStr=p_vt->acNameTab;
> > >> >printf("best index constraint column %d\n", p_info-
> > >> >>aConstraint[0].iColumn);
> > >> >for(i=0;i<p_info->nConstraint;i++){
> > >> >p_info->aConstraintUsage[i].argvIndex=(1+i);
> > >> >}
> > >> >}
> > >> >if(p_info->nOrderBy==0){
> > >> >p_info->aOrderBy=NULL;
> > >> >}
> > >> >return SQLITE_OK;
> > >> >}
> > >> >
> > >> >thx you very much ^^
> > >> >_______________________________________________
> > >> >sqlite-users mailing list
> > >> >sqlite-users@sqlite.org
> > >> >http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> > >>
> > >>
> > >>
> > >> _______________________________________________
> > >> sqlite-users mailing list
> > >> sqlite-users@sqlite.org
> > >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> > >>
> > >
> > >
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@sqlite.org
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >
> >
> > ----------------------------------------------------------------------
> > -
> > Gunter Hick
> > Software Engineer
> >
> > Scientific Games International GmbH
> > Klitschgasse 2 – 4, A - 1130 Vienna,
> > Austria
> > FN 157284 a, HG Wien
> > Tel: +43 1 80100 0
> > E-Mail: h...@scigames.at
> >
> > This e-mail is confidential and may well also be legally privileged.
> > If you have received it in error, you are on notice as to its status
> > and accordingly please notify us immediately by reply e-mail and then
> > delete this message from your system. Please do not copy it or use it
> > for any purposes, or disclose its contents to any person as to do so
> > could be a breach of confidence. Thank you for your cooperation.
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@sqlite.org
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to