~ubuntu-branches/ubuntu/wily/sqlite3/wily

« back to all changes in this revision

Viewing changes to c3ref/index_info.html

  • Committer: Package Import Robot
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2012-06-13 21:43:48 UTC
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: package-import@ubuntu.com-20120613214348-uy14uupdeq0hh04k
Tags: upstream-3.7.13/www
Import upstream version 3.7.13, component www

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 
2
<html><head>
 
3
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
 
4
<title>Virtual Table Indexing Information</title>
 
5
<style type="text/css">
 
6
body {
 
7
    margin: auto;
 
8
    font-family: Verdana, sans-serif;
 
9
    padding: 8px 1%;
 
10
}
 
11
 
 
12
a { color: #044a64 }
 
13
a:visited { color: #734559 }
 
14
 
 
15
.logo { position:absolute; margin:3px; }
 
16
.tagline {
 
17
  float:right;
 
18
  text-align:right;
 
19
  font-style:italic;
 
20
  width:300px;
 
21
  margin:12px;
 
22
  margin-top:58px;
 
23
}
 
24
 
 
25
.toolbar {
 
26
  text-align: center;
 
27
  line-height: 1.6em;
 
28
  margin: 0;
 
29
  padding: 0px 8px;
 
30
}
 
31
.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }
 
32
.toolbar a:visited { color: white; }
 
33
.toolbar a:hover { color: #044a64; background: white; }
 
34
 
 
35
.content    { margin: 5%; }
 
36
.content dt { font-weight:bold; }
 
37
.content dd { margin-bottom: 25px; margin-left:20%; }
 
38
.content ul { padding:0px; padding-left: 15px; margin:0px; }
 
39
 
 
40
/* rounded corners */
 
41
.se  { background: url(../images/se.gif) 100% 100% no-repeat #044a64}
 
42
.sw  { background: url(../images/sw.gif) 0% 100% no-repeat }
 
43
.ne  { background: url(../images/ne.gif) 100% 0% no-repeat }
 
44
.nw  { background: url(../images/nw.gif) 0% 0% no-repeat }
 
45
 
 
46
/* Things for "fancyformat" documents start here. */
 
47
.fancy img+p {font-style:italic}
 
48
.fancy .codeblock i { color: darkblue; }
 
49
.fancy h1,.fancy h2,.fancy h3,.fancy h4 {font-weight:normal;color:#044a64}
 
50
.fancy h2 { margin-left: 10px }
 
51
.fancy h3 { margin-left: 20px }
 
52
.fancy h4 { margin-left: 30px }
 
53
.fancy th {white-space:nowrap;text-align:left;border-bottom:solid 1px #444}
 
54
.fancy th, .fancy td {padding: 0.2em 1ex; vertical-align:top}
 
55
.fancy #toc a        { color: darkblue ; text-decoration: none }
 
56
.fancy .todo         { color: #AA3333 ; font-style : italic }
 
57
.fancy .todo:before  { content: 'TODO:' }
 
58
.fancy p.todo        { border: solid #AA3333 1px; padding: 1ex }
 
59
.fancy img { display:block; }
 
60
.fancy :link:hover, .fancy :visited:hover { background: wheat }
 
61
.fancy p,.fancy ul,.fancy ol { margin: 1em 5ex }
 
62
.fancy li p { margin: 1em 0 }
 
63
/* End of "fancyformat" specific rules. */
 
64
 
 
65
</style>
 
66
  
 
67
</head>
 
68
<body>
 
69
<div><!-- container div to satisfy validator -->
 
70
 
 
71
<a href="../index.html">
 
72
<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite Logo"
 
73
 border="0"></a>
 
74
<div><!-- IE hack to prevent disappearing logo--></div>
 
75
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
 
76
 
 
77
<table width=100% style="clear:both"><tr><td>
 
78
  <div class="se"><div class="sw"><div class="ne"><div class="nw">
 
79
  <table width=100% style="padding:0;margin:0;cell-spacing:0"><tr>
 
80
  <td width=100%>
 
81
  <div class="toolbar">
 
82
    <a href="../about.html">About</a>
 
83
    <a href="../sitemap.html">Sitemap</a>
 
84
    <a href="../docs.html">Documentation</a>
 
85
    <a href="../download.html">Download</a>
 
86
    <a href="../copyright.html">License</a>
 
87
    <a href="../news.html">News</a>
 
88
    <a href="../support.html">Support</a>
 
89
  </div>
 
90
<script>
 
91
  gMsg = "Search SQLite Docs..."
 
92
  function entersearch() {
 
93
    var q = document.getElementById("q");
 
94
    if( q.value == gMsg ) { q.value = "" }
 
95
    q.style.color = "black"
 
96
    q.style.fontStyle = "normal"
 
97
  }
 
98
  function leavesearch() {
 
99
    var q = document.getElementById("q");
 
100
    if( q.value == "" ) { 
 
101
      q.value = gMsg
 
102
      q.style.color = "#044a64"
 
103
      q.style.fontStyle = "italic"
 
104
    }
 
105
  }
 
106
</script>
 
107
<td>
 
108
    <div style="padding:0 1em 0px 0;white-space:nowrap">
 
109
    <form name=f method="GET" action="http://www.sqlite.org/search">
 
110
      <input id=q name=q type=text
 
111
       onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
 
112
      <input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
 
113
    </form>
 
114
    </div>
 
115
  </table>
 
116
</div></div></div></div>
 
117
</td></tr></table>
 
118
<div class=startsearch></div>
 
119
  
 
120
<a href="intro.html"><h2>SQLite C Interface</h2></a><h2>Virtual Table Indexing Information</h2><blockquote><pre>struct sqlite3_index_info {
 
121
  /* Inputs */
 
122
  int nConstraint;           /* Number of entries in aConstraint */
 
123
  struct sqlite3_index_constraint {
 
124
     int iColumn;              /* Column on left-hand side of constraint */
 
125
     unsigned char op;         /* Constraint operator */
 
126
     unsigned char usable;     /* True if this constraint is usable */
 
127
     int iTermOffset;          /* Used internally - xBestIndex should ignore */
 
128
  } *aConstraint;            /* Table of WHERE clause constraints */
 
129
  int nOrderBy;              /* Number of terms in the ORDER BY clause */
 
130
  struct sqlite3_index_orderby {
 
131
     int iColumn;              /* Column number */
 
132
     unsigned char desc;       /* True for DESC.  False for ASC. */
 
133
  } *aOrderBy;               /* The ORDER BY clause */
 
134
  /* Outputs */
 
135
  struct sqlite3_index_constraint_usage {
 
136
    int argvIndex;           /* if &gt;0, constraint is part of argv to xFilter */
 
137
    unsigned char omit;      /* Do not code a test for this constraint */
 
138
  } *aConstraintUsage;
 
139
  int idxNum;                /* Number used to identify the index */
 
140
  char *idxStr;              /* String, possibly obtained from sqlite3_malloc */
 
141
  int needToFreeIdxStr;      /* Free idxStr using sqlite3_free() if true */
 
142
  int orderByConsumed;       /* True if output is already ordered */
 
143
  double estimatedCost;      /* Estimated cost of using this index */
 
144
};
 
145
</pre></blockquote><p>
 
146
The sqlite3_index_info structure and its substructures is used as part
 
147
of the <a href="../vtab.html">virtual table</a> interface to
 
148
pass information into and receive the reply from the <a href="../vtab.html#xbestindex">xBestIndex</a>
 
149
method of a <a href="../c3ref/module.html">virtual table module</a>.  The fields under **Inputs** are the
 
150
inputs to xBestIndex and are read-only.  xBestIndex inserts its
 
151
results into the **Outputs** fields.</p>
 
152
 
 
153
<p>The aConstraint[] array records WHERE clause constraints of the form:</p>
 
154
 
 
155
<p><blockquote>column OP expr</blockquote></p>
 
156
 
 
157
<p>where OP is =, &lt;, &lt;=, &gt;, or &gt;=.  The particular operator is
 
158
stored in aConstraint[].op using one of the
 
159
<a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ values</a>.
 
160
The index of the column is stored in
 
161
aConstraint[].iColumn.  aConstraint[].usable is TRUE if the
 
162
expr on the right-hand side can be evaluated (and thus the constraint
 
163
is usable) and false if it cannot.</p>
 
164
 
 
165
<p>The optimizer automatically inverts terms of the form "expr OP column"
 
166
and makes other simplifications to the WHERE clause in an attempt to
 
167
get as many WHERE clause terms into the form shown above as possible.
 
168
The aConstraint[] array only reports WHERE clause terms that are
 
169
relevant to the particular virtual table being queried.</p>
 
170
 
 
171
<p>Information about the ORDER BY clause is stored in aOrderBy[].
 
172
Each term of aOrderBy records a column of the ORDER BY clause.</p>
 
173
 
 
174
<p>The <a href="../vtab.html#xbestindex">xBestIndex</a> method must fill aConstraintUsage[] with information
 
175
about what parameters to pass to xFilter.  If argvIndex>0 then
 
176
the right-hand side of the corresponding aConstraint[] is evaluated
 
177
and becomes the argvIndex-th entry in argv.  If aConstraintUsage[].omit
 
178
is true, then the constraint is assumed to be fully handled by the
 
179
virtual table and is not checked again by SQLite.</p>
 
180
 
 
181
<p>The idxNum and idxPtr values are recorded and passed into the
 
182
<a href="../vtab.html#xfilter">xFilter</a> method.
 
183
<a href="../c3ref/free.html">sqlite3_free()</a> is used to free idxPtr if and only if
 
184
needToFreeIdxPtr is true.</p>
 
185
 
 
186
<p>The orderByConsumed means that output from <a href="../vtab.html#xfilter">xFilter</a>/<a href="../vtab.html#xnext">xNext</a> will occur in
 
187
the correct order to satisfy the ORDER BY clause so that no separate
 
188
sorting step is required.</p>
 
189
 
 
190
<p>The estimatedCost value is an estimate of the cost of doing the
 
191
particular lookup.  A full scan of a table with N entries should have
 
192
a cost of N.  A binary search of a table of N entries should have a
 
193
cost of approximately log(N).
 
194
</p><p>See also lists of
 
195
  <a href="objlist.html">Objects</a>,
 
196
  <a href="constlist.html">Constants</a>, and
 
197
  <a href="funclist.html">Functions</a>.</p>