Fossil SCM

merge trunk

jan.nijtmans 2012-11-10 19:57 UTC ticket-fb3057f6ed merge
Commit df71e9d360476d41f40a86bab3c2ae213ef5cdb4
+36 -4
--- src/add.c
+++ src/add.c
@@ -60,22 +60,39 @@
6060
static const char *const azManifest[] = {
6161
"manifest",
6262
"manifest.uuid",
6363
};
6464
65
+ /*
66
+ ** Names of repository files, if they exist in the checkout.
67
+ */
68
+ static const char *azRepo[4] = { 0, 0, 0, 0 };
69
+
6570
/* Cached setting "manifest" */
6671
static int cachedManifest = -1;
6772
6873
if( cachedManifest == -1 ){
74
+ Blob repo;
6975
cachedManifest = db_get_boolean("manifest",0);
76
+ blob_zero(&repo);
77
+ if( file_tree_name(g.zRepositoryName, &repo, 0) ){
78
+ const char *zRepo = blob_str(&repo);
79
+ azRepo[0] = zRepo;
80
+ azRepo[1] = mprintf("%s-journal", zRepo);
81
+ azRepo[2] = mprintf("%s-wal", zRepo);
82
+ azRepo[3] = mprintf("%s-shm", zRepo);
83
+ }
7084
}
7185
72
- if( N>=0 && N<count(azName) ) return azName[N];
73
- if( N>=count(azName) && N<count(azName)+count(azManifest)
74
- && cachedManifest ){
75
- return azManifest[N-count(azName)];
86
+ if( N<0 ) return 0;
87
+ if( N<count(azName) ) return azName[N];
88
+ N -= count(azName);
89
+ if( cachedManifest ){
90
+ if( N<count(azManifest) ) return azManifest[N];
91
+ N -= count(azManifest);
7692
}
93
+ if( N<count(azRepo) ) return azRepo[N];
7794
return 0;
7895
}
7996
8097
/*
8198
** Return a list of all reserved filenames as an SQL list.
@@ -93,10 +110,25 @@
93110
}
94111
zAll = blob_str(&x);
95112
}
96113
return zAll;
97114
}
115
+
116
+/*
117
+** COMMAND: test-reserved-names
118
+**
119
+** Show all reserved filenames for the current check-out.
120
+*/
121
+void test_reserved_names(void){
122
+ int i;
123
+ const char *z;
124
+ db_must_be_within_tree();
125
+ for(i=0; (z = fossil_reserved_name(i))!=0; i++){
126
+ fossil_print("%3d: %s\n", i, z);
127
+ }
128
+ fossil_print("ALL: (%s)\n", fossil_all_reserved_names());
129
+}
98130
99131
/*
100132
** Add a single file named zName to the VFILE table with vid.
101133
**
102134
** Omit any file whose name is pOmit.
103135
--- src/add.c
+++ src/add.c
@@ -60,22 +60,39 @@
60 static const char *const azManifest[] = {
61 "manifest",
62 "manifest.uuid",
63 };
64
 
 
 
 
 
65 /* Cached setting "manifest" */
66 static int cachedManifest = -1;
67
68 if( cachedManifest == -1 ){
 
69 cachedManifest = db_get_boolean("manifest",0);
 
 
 
 
 
 
 
 
70 }
71
72 if( N>=0 && N<count(azName) ) return azName[N];
73 if( N>=count(azName) && N<count(azName)+count(azManifest)
74 && cachedManifest ){
75 return azManifest[N-count(azName)];
 
 
76 }
 
77 return 0;
78 }
79
80 /*
81 ** Return a list of all reserved filenames as an SQL list.
@@ -93,10 +110,25 @@
93 }
94 zAll = blob_str(&x);
95 }
96 return zAll;
97 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
99 /*
100 ** Add a single file named zName to the VFILE table with vid.
101 **
102 ** Omit any file whose name is pOmit.
103
--- src/add.c
+++ src/add.c
@@ -60,22 +60,39 @@
60 static const char *const azManifest[] = {
61 "manifest",
62 "manifest.uuid",
63 };
64
65 /*
66 ** Names of repository files, if they exist in the checkout.
67 */
68 static const char *azRepo[4] = { 0, 0, 0, 0 };
69
70 /* Cached setting "manifest" */
71 static int cachedManifest = -1;
72
73 if( cachedManifest == -1 ){
74 Blob repo;
75 cachedManifest = db_get_boolean("manifest",0);
76 blob_zero(&repo);
77 if( file_tree_name(g.zRepositoryName, &repo, 0) ){
78 const char *zRepo = blob_str(&repo);
79 azRepo[0] = zRepo;
80 azRepo[1] = mprintf("%s-journal", zRepo);
81 azRepo[2] = mprintf("%s-wal", zRepo);
82 azRepo[3] = mprintf("%s-shm", zRepo);
83 }
84 }
85
86 if( N<0 ) return 0;
87 if( N<count(azName) ) return azName[N];
88 N -= count(azName);
89 if( cachedManifest ){
90 if( N<count(azManifest) ) return azManifest[N];
91 N -= count(azManifest);
92 }
93 if( N<count(azRepo) ) return azRepo[N];
94 return 0;
95 }
96
97 /*
98 ** Return a list of all reserved filenames as an SQL list.
@@ -93,10 +110,25 @@
110 }
111 zAll = blob_str(&x);
112 }
113 return zAll;
114 }
115
116 /*
117 ** COMMAND: test-reserved-names
118 **
119 ** Show all reserved filenames for the current check-out.
120 */
121 void test_reserved_names(void){
122 int i;
123 const char *z;
124 db_must_be_within_tree();
125 for(i=0; (z = fossil_reserved_name(i))!=0; i++){
126 fossil_print("%3d: %s\n", i, z);
127 }
128 fossil_print("ALL: (%s)\n", fossil_all_reserved_names());
129 }
130
131 /*
132 ** Add a single file named zName to the VFILE table with vid.
133 **
134 ** Omit any file whose name is pOmit.
135
--- src/checkin.c
+++ src/checkin.c
@@ -324,11 +324,10 @@
324324
**
325325
** See also: changes, clean, status
326326
*/
327327
void extra_cmd(void){
328328
Blob path;
329
- Blob repo;
330329
Stmt q;
331330
int n;
332331
const char *zIgnoreFlag = find_option("ignore",0,1);
333332
unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0;
334333
int cwdRelative = 0;
@@ -353,13 +352,10 @@
353352
"SELECT x FROM sfile"
354353
" WHERE x NOT IN (%s)"
355354
" ORDER BY 1",
356355
fossil_all_reserved_names()
357356
);
358
- if( file_tree_name(g.zRepositoryName, &repo, 0) ){
359
- db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
360
- }
361357
db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)");
362358
blob_zero(&rewrittenPathname);
363359
while( db_step(&q)==SQLITE_ROW ){
364360
zDisplayName = zPathname = db_column_text(&q, 0);
365361
if( cwdRelative ) {
366362
--- src/checkin.c
+++ src/checkin.c
@@ -324,11 +324,10 @@
324 **
325 ** See also: changes, clean, status
326 */
327 void extra_cmd(void){
328 Blob path;
329 Blob repo;
330 Stmt q;
331 int n;
332 const char *zIgnoreFlag = find_option("ignore",0,1);
333 unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0;
334 int cwdRelative = 0;
@@ -353,13 +352,10 @@
353 "SELECT x FROM sfile"
354 " WHERE x NOT IN (%s)"
355 " ORDER BY 1",
356 fossil_all_reserved_names()
357 );
358 if( file_tree_name(g.zRepositoryName, &repo, 0) ){
359 db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
360 }
361 db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)");
362 blob_zero(&rewrittenPathname);
363 while( db_step(&q)==SQLITE_ROW ){
364 zDisplayName = zPathname = db_column_text(&q, 0);
365 if( cwdRelative ) {
366
--- src/checkin.c
+++ src/checkin.c
@@ -324,11 +324,10 @@
324 **
325 ** See also: changes, clean, status
326 */
327 void extra_cmd(void){
328 Blob path;
 
329 Stmt q;
330 int n;
331 const char *zIgnoreFlag = find_option("ignore",0,1);
332 unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0;
333 int cwdRelative = 0;
@@ -353,13 +352,10 @@
352 "SELECT x FROM sfile"
353 " WHERE x NOT IN (%s)"
354 " ORDER BY 1",
355 fossil_all_reserved_names()
356 );
 
 
 
357 db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)");
358 blob_zero(&rewrittenPathname);
359 while( db_step(&q)==SQLITE_ROW ){
360 zDisplayName = zPathname = db_column_text(&q, 0);
361 if( cwdRelative ) {
362
+2 -2
--- src/finfo.c
+++ src/finfo.c
@@ -331,11 +331,11 @@
331331
gidx = graph_add_row(pGraph, frid, fpid>0 ? 1 : 0, &fpid, zBr, zBgClr, 0);
332332
if( memcmp(zDate, zPrevDate, 10) ){
333333
sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate);
334334
@ <tr><td>
335335
@ <div class="divider">%s(zPrevDate)</div>
336
- @ </td></tr>
336
+ @ </td><td></td><td></td></tr>
337337
}
338338
memcpy(zTime, &zDate[11], 5);
339339
zTime[5] = 0;
340340
@ <tr><td class="timelineTime">
341341
@ %z(href("%R/timeline?c=%t",zDate))%s(zTime)</a></td>
@@ -373,12 +373,12 @@
373373
graph_free(pGraph);
374374
pGraph = 0;
375375
}else{
376376
@ <tr><td></td><td>
377377
@ <div id="grbtm" style="width:%d(pGraph->mxRail*20+30)px;"></div>
378
- @ </td></tr>
378
+ @ </td><td></td></tr>
379379
}
380380
}
381381
@ </table>
382382
timeline_output_graph_javascript(pGraph, 0);
383383
style_footer();
384384
}
385385
--- src/finfo.c
+++ src/finfo.c
@@ -331,11 +331,11 @@
331 gidx = graph_add_row(pGraph, frid, fpid>0 ? 1 : 0, &fpid, zBr, zBgClr, 0);
332 if( memcmp(zDate, zPrevDate, 10) ){
333 sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate);
334 @ <tr><td>
335 @ <div class="divider">%s(zPrevDate)</div>
336 @ </td></tr>
337 }
338 memcpy(zTime, &zDate[11], 5);
339 zTime[5] = 0;
340 @ <tr><td class="timelineTime">
341 @ %z(href("%R/timeline?c=%t",zDate))%s(zTime)</a></td>
@@ -373,12 +373,12 @@
373 graph_free(pGraph);
374 pGraph = 0;
375 }else{
376 @ <tr><td></td><td>
377 @ <div id="grbtm" style="width:%d(pGraph->mxRail*20+30)px;"></div>
378 @ </td></tr>
379 }
380 }
381 @ </table>
382 timeline_output_graph_javascript(pGraph, 0);
383 style_footer();
384 }
385
--- src/finfo.c
+++ src/finfo.c
@@ -331,11 +331,11 @@
331 gidx = graph_add_row(pGraph, frid, fpid>0 ? 1 : 0, &fpid, zBr, zBgClr, 0);
332 if( memcmp(zDate, zPrevDate, 10) ){
333 sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate);
334 @ <tr><td>
335 @ <div class="divider">%s(zPrevDate)</div>
336 @ </td><td></td><td></td></tr>
337 }
338 memcpy(zTime, &zDate[11], 5);
339 zTime[5] = 0;
340 @ <tr><td class="timelineTime">
341 @ %z(href("%R/timeline?c=%t",zDate))%s(zTime)</a></td>
@@ -373,12 +373,12 @@
373 graph_free(pGraph);
374 pGraph = 0;
375 }else{
376 @ <tr><td></td><td>
377 @ <div id="grbtm" style="width:%d(pGraph->mxRail*20+30)px;"></div>
378 @ </td><td></td></tr>
379 }
380 }
381 @ </table>
382 timeline_output_graph_javascript(pGraph, 0);
383 style_footer();
384 }
385
+84 -12
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -673,11 +673,11 @@
673673
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
674674
** [sqlite_version()] and [sqlite_source_id()].
675675
*/
676676
#define SQLITE_VERSION "3.7.15"
677677
#define SQLITE_VERSION_NUMBER 3007015
678
-#define SQLITE_SOURCE_ID "2012-10-30 18:09:46 9dca18f5fea84afbecb314ee1cdfb98430656af3"
678
+#define SQLITE_SOURCE_ID "2012-11-09 21:40:02 5a3b07f0f5dfae7eea870303f52f37d6a17f1da2"
679679
680680
/*
681681
** CAPI3REF: Run-Time Library Version Numbers
682682
** KEYWORDS: sqlite3_version, sqlite3_sourceid
683683
**
@@ -1038,10 +1038,11 @@
10381038
#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
10391039
#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
10401040
#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
10411041
#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
10421042
#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
1043
+#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8))
10431044
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
10441045
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
10451046
#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
10461047
#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
10471048
#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
@@ -11008,10 +11009,11 @@
1100811009
int addrInTop; /* Top of the IN loop */
1100911010
} *aInLoop; /* Information about each nested IN operator */
1101011011
} in; /* Used when plan.wsFlags&WHERE_IN_ABLE */
1101111012
Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */
1101211013
} u;
11014
+ double rOptCost; /* "Optimal" cost for this level */
1101311015
1101411016
/* The following field is really not part of the current level. But
1101511017
** we need a place to cache virtual table index information for each
1101611018
** virtual table in the FROM clause and the WhereLevel structure is
1101711019
** a convenient place since there is one WhereLevel for each FROM clause
@@ -13716,10 +13718,11 @@
1371613718
int nByte = 0; /* Used to accumulate return value */
1371713719
1371813720
db->pnBytesFreed = &nByte;
1371913721
for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
1372013722
sqlite3VdbeClearObject(db, pVdbe);
13723
+ sqlite3DbFree(db, pVdbe);
1372113724
}
1372213725
db->pnBytesFreed = 0;
1372313726
1372413727
*pHighwater = 0;
1372513728
*pCurrent = nByte;
@@ -28219,12 +28222,17 @@
2821928222
int dirSync /* If true, fsync() directory after deleting file */
2822028223
){
2822128224
int rc = SQLITE_OK;
2822228225
UNUSED_PARAMETER(NotUsed);
2822328226
SimulateIOError(return SQLITE_IOERR_DELETE);
28224
- if( osUnlink(zPath)==(-1) && errno!=ENOENT ){
28225
- return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
28227
+ if( osUnlink(zPath)==(-1) ){
28228
+ if( errno==ENOENT ){
28229
+ rc = SQLITE_IOERR_DELETE_NOENT;
28230
+ }else{
28231
+ rc = unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
28232
+ }
28233
+ return rc;
2822628234
}
2822728235
#ifndef SQLITE_DISABLE_DIRSYNC
2822828236
if( (dirSync & 1)!=0 ){
2822928237
int fd;
2823028238
rc = osOpenDirectory(zPath, &fd);
@@ -40388,10 +40396,11 @@
4038840396
4038940397
rc = pagerPagecount(pPager, &nPage);
4039040398
if( rc ) return rc;
4039140399
if( nPage==0 ){
4039240400
rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
40401
+ if( rc==SQLITE_IOERR_DELETE_NOENT ) rc = SQLITE_OK;
4039340402
isWal = 0;
4039440403
}else{
4039540404
rc = sqlite3OsAccess(
4039640405
pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal
4039740406
);
@@ -77655,12 +77664,14 @@
7765577664
*/
7765677665
assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
7765777666
ExprSetIrreducible(pExpr);
7765877667
pExpr->iAgg = (i16)i;
7765977668
pExpr->pAggInfo = pAggInfo;
77669
+ return WRC_Prune;
77670
+ }else{
77671
+ return WRC_Continue;
7766077672
}
77661
- return WRC_Prune;
7766277673
}
7766377674
}
7766477675
return WRC_Continue;
7766577676
}
7766677677
static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
@@ -77668,13 +77679,14 @@
7766877679
UNUSED_PARAMETER(pSelect);
7766977680
return WRC_Continue;
7767077681
}
7767177682
7767277683
/*
77673
-** Analyze the given expression looking for aggregate functions and
77674
-** for variables that need to be added to the pParse->aAgg[] array.
77675
-** Make additional entries to the pParse->aAgg[] array as necessary.
77684
+** Analyze the pExpr expression looking for aggregate functions and
77685
+** for variables that need to be added to AggInfo object that pNC->pAggInfo
77686
+** points to. Additional entries are made on the AggInfo object as
77687
+** necessary.
7767677688
**
7767777689
** This routine should only be called after the expression has been
7767877690
** analyzed by sqlite3ResolveExprNames().
7767977691
*/
7768077692
SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
@@ -85700,10 +85712,59 @@
8570085712
sqlite3_result_double(context, rVal);
8570185713
break;
8570285714
}
8570385715
}
8570485716
}
85717
+
85718
+/*
85719
+** Implementation of the instr() function.
85720
+**
85721
+** instr(haystack,needle) finds the first occurrence of needle
85722
+** in haystack and returns the number of previous characters plus 1,
85723
+** or 0 if needle does not occur within haystack.
85724
+**
85725
+** If both haystack and needle are BLOBs, then the result is one more than
85726
+** the number of bytes in haystack prior to the first occurrence of needle,
85727
+** or 0 if needle never occurs in haystack.
85728
+*/
85729
+static void instrFunc(
85730
+ sqlite3_context *context,
85731
+ int argc,
85732
+ sqlite3_value **argv
85733
+){
85734
+ const unsigned char *zHaystack;
85735
+ const unsigned char *zNeedle;
85736
+ int nHaystack;
85737
+ int nNeedle;
85738
+ int typeHaystack, typeNeedle;
85739
+ int N = 1;
85740
+ int isText;
85741
+
85742
+ typeHaystack = sqlite3_value_type(argv[0]);
85743
+ typeNeedle = sqlite3_value_type(argv[1]);
85744
+ if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
85745
+ nHaystack = sqlite3_value_bytes(argv[0]);
85746
+ nNeedle = sqlite3_value_bytes(argv[1]);
85747
+ if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
85748
+ zHaystack = sqlite3_value_blob(argv[0]);
85749
+ zNeedle = sqlite3_value_blob(argv[1]);
85750
+ isText = 0;
85751
+ }else{
85752
+ zHaystack = sqlite3_value_text(argv[0]);
85753
+ zNeedle = sqlite3_value_text(argv[1]);
85754
+ isText = 1;
85755
+ }
85756
+ while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
85757
+ N++;
85758
+ do{
85759
+ nHaystack--;
85760
+ zHaystack++;
85761
+ }while( isText && (zHaystack[0]&0xc0)==0x80 );
85762
+ }
85763
+ if( nNeedle>nHaystack ) N = 0;
85764
+ sqlite3_result_int(context, N);
85765
+}
8570585766
8570685767
/*
8570785768
** Implementation of the substr() function.
8570885769
**
8570985770
** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
@@ -87069,10 +87130,11 @@
8706987130
FUNCTION(max, -1, 1, 1, minmaxFunc ),
8707087131
FUNCTION(max, 0, 1, 1, 0 ),
8707187132
AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
8707287133
FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
8707387134
FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
87135
+ FUNCTION(instr, 2, 0, 0, instrFunc ),
8707487136
FUNCTION(substr, 2, 0, 0, substrFunc ),
8707587137
FUNCTION(substr, 3, 0, 0, substrFunc ),
8707687138
FUNCTION(abs, 1, 0, 0, absFunc ),
8707787139
#ifndef SQLITE_OMIT_FLOATING_POINT
8707887140
FUNCTION(round, 1, 0, 0, roundFunc ),
@@ -107298,19 +107360,32 @@
107298107360
|| sWBI.cost.plan.u.pIdx==sWBI.pSrc->pIndex );
107299107361
107300107362
if( isOptimal && (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){
107301107363
notIndexed |= m;
107302107364
}
107365
+ if( isOptimal ){
107366
+ pWInfo->a[j].rOptCost = sWBI.cost.rCost;
107367
+ }else if( iFrom<nTabList-1 ){
107368
+ /* If two or more tables have nearly the same outer loop cost,
107369
+ ** very different inner loop (optimal) cost, we want to choose
107370
+ ** for the outer loop that table which benefits the least from
107371
+ ** being in the inner loop. The following code scales the
107372
+ ** outer loop cost estimate to accomplish that. */
107373
+ WHERETRACE((" scaling cost from %.1f to %.1f\n",
107374
+ sWBI.cost.rCost,
107375
+ sWBI.cost.rCost/pWInfo->a[j].rOptCost));
107376
+ sWBI.cost.rCost /= pWInfo->a[j].rOptCost;
107377
+ }
107303107378
107304107379
/* Conditions under which this table becomes the best so far:
107305107380
**
107306107381
** (1) The table must not depend on other tables that have not
107307107382
** yet run. (In other words, it must not depend on tables
107308107383
** in inner loops.)
107309107384
**
107310
- ** (2) A full-table-scan plan cannot supercede indexed plan unless
107311
- ** the full-table-scan is an "optimal" plan as defined above.
107385
+ ** (2) (This rule was removed on 2012-11-09. The scaling of the
107386
+ ** cost using the optimal scan cost made this rule obsolete.)
107312107387
**
107313107388
** (3) All tables have an INDEXED BY clause or this table lacks an
107314107389
** INDEXED BY clause or this table uses the specific
107315107390
** index specified by its INDEXED BY clause. This rule ensures
107316107391
** that a best-so-far is always selected even if an impossible
@@ -107321,13 +107396,10 @@
107321107396
**
107322107397
** (4) The plan cost must be lower than prior plans, where "cost"
107323107398
** is defined by the compareCost() function above.
107324107399
*/
107325107400
if( (sWBI.cost.used&sWBI.notValid)==0 /* (1) */
107326
- && (bestJ<0 || (notIndexed&m)!=0 /* (2) */
107327
- || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
107328
- || (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)
107329107401
&& (nUnconstrained==0 || sWBI.pSrc->pIndex==0 /* (3) */
107330107402
|| NEVER((sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
107331107403
&& (bestJ<0 || compareCost(&sWBI.cost, &bestPlan)) /* (4) */
107332107404
){
107333107405
WHERETRACE((" === table %d (%s) is best so far\n"
107334107406
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -673,11 +673,11 @@
673 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
674 ** [sqlite_version()] and [sqlite_source_id()].
675 */
676 #define SQLITE_VERSION "3.7.15"
677 #define SQLITE_VERSION_NUMBER 3007015
678 #define SQLITE_SOURCE_ID "2012-10-30 18:09:46 9dca18f5fea84afbecb314ee1cdfb98430656af3"
679
680 /*
681 ** CAPI3REF: Run-Time Library Version Numbers
682 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
683 **
@@ -1038,10 +1038,11 @@
1038 #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
1039 #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
1040 #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
1041 #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
1042 #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
 
1043 #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
1044 #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
1045 #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
1046 #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
1047 #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
@@ -11008,10 +11009,11 @@
11008 int addrInTop; /* Top of the IN loop */
11009 } *aInLoop; /* Information about each nested IN operator */
11010 } in; /* Used when plan.wsFlags&WHERE_IN_ABLE */
11011 Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */
11012 } u;
 
11013
11014 /* The following field is really not part of the current level. But
11015 ** we need a place to cache virtual table index information for each
11016 ** virtual table in the FROM clause and the WhereLevel structure is
11017 ** a convenient place since there is one WhereLevel for each FROM clause
@@ -13716,10 +13718,11 @@
13716 int nByte = 0; /* Used to accumulate return value */
13717
13718 db->pnBytesFreed = &nByte;
13719 for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
13720 sqlite3VdbeClearObject(db, pVdbe);
 
13721 }
13722 db->pnBytesFreed = 0;
13723
13724 *pHighwater = 0;
13725 *pCurrent = nByte;
@@ -28219,12 +28222,17 @@
28219 int dirSync /* If true, fsync() directory after deleting file */
28220 ){
28221 int rc = SQLITE_OK;
28222 UNUSED_PARAMETER(NotUsed);
28223 SimulateIOError(return SQLITE_IOERR_DELETE);
28224 if( osUnlink(zPath)==(-1) && errno!=ENOENT ){
28225 return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
 
 
 
 
 
28226 }
28227 #ifndef SQLITE_DISABLE_DIRSYNC
28228 if( (dirSync & 1)!=0 ){
28229 int fd;
28230 rc = osOpenDirectory(zPath, &fd);
@@ -40388,10 +40396,11 @@
40388
40389 rc = pagerPagecount(pPager, &nPage);
40390 if( rc ) return rc;
40391 if( nPage==0 ){
40392 rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
 
40393 isWal = 0;
40394 }else{
40395 rc = sqlite3OsAccess(
40396 pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal
40397 );
@@ -77655,12 +77664,14 @@
77655 */
77656 assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
77657 ExprSetIrreducible(pExpr);
77658 pExpr->iAgg = (i16)i;
77659 pExpr->pAggInfo = pAggInfo;
 
 
 
77660 }
77661 return WRC_Prune;
77662 }
77663 }
77664 return WRC_Continue;
77665 }
77666 static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
@@ -77668,13 +77679,14 @@
77668 UNUSED_PARAMETER(pSelect);
77669 return WRC_Continue;
77670 }
77671
77672 /*
77673 ** Analyze the given expression looking for aggregate functions and
77674 ** for variables that need to be added to the pParse->aAgg[] array.
77675 ** Make additional entries to the pParse->aAgg[] array as necessary.
 
77676 **
77677 ** This routine should only be called after the expression has been
77678 ** analyzed by sqlite3ResolveExprNames().
77679 */
77680 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
@@ -85700,10 +85712,59 @@
85700 sqlite3_result_double(context, rVal);
85701 break;
85702 }
85703 }
85704 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85705
85706 /*
85707 ** Implementation of the substr() function.
85708 **
85709 ** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
@@ -87069,10 +87130,11 @@
87069 FUNCTION(max, -1, 1, 1, minmaxFunc ),
87070 FUNCTION(max, 0, 1, 1, 0 ),
87071 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
87072 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
87073 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
 
87074 FUNCTION(substr, 2, 0, 0, substrFunc ),
87075 FUNCTION(substr, 3, 0, 0, substrFunc ),
87076 FUNCTION(abs, 1, 0, 0, absFunc ),
87077 #ifndef SQLITE_OMIT_FLOATING_POINT
87078 FUNCTION(round, 1, 0, 0, roundFunc ),
@@ -107298,19 +107360,32 @@
107298 || sWBI.cost.plan.u.pIdx==sWBI.pSrc->pIndex );
107299
107300 if( isOptimal && (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){
107301 notIndexed |= m;
107302 }
 
 
 
 
 
 
 
 
 
 
 
 
 
107303
107304 /* Conditions under which this table becomes the best so far:
107305 **
107306 ** (1) The table must not depend on other tables that have not
107307 ** yet run. (In other words, it must not depend on tables
107308 ** in inner loops.)
107309 **
107310 ** (2) A full-table-scan plan cannot supercede indexed plan unless
107311 ** the full-table-scan is an "optimal" plan as defined above.
107312 **
107313 ** (3) All tables have an INDEXED BY clause or this table lacks an
107314 ** INDEXED BY clause or this table uses the specific
107315 ** index specified by its INDEXED BY clause. This rule ensures
107316 ** that a best-so-far is always selected even if an impossible
@@ -107321,13 +107396,10 @@
107321 **
107322 ** (4) The plan cost must be lower than prior plans, where "cost"
107323 ** is defined by the compareCost() function above.
107324 */
107325 if( (sWBI.cost.used&sWBI.notValid)==0 /* (1) */
107326 && (bestJ<0 || (notIndexed&m)!=0 /* (2) */
107327 || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
107328 || (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)
107329 && (nUnconstrained==0 || sWBI.pSrc->pIndex==0 /* (3) */
107330 || NEVER((sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
107331 && (bestJ<0 || compareCost(&sWBI.cost, &bestPlan)) /* (4) */
107332 ){
107333 WHERETRACE((" === table %d (%s) is best so far\n"
107334
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -673,11 +673,11 @@
673 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
674 ** [sqlite_version()] and [sqlite_source_id()].
675 */
676 #define SQLITE_VERSION "3.7.15"
677 #define SQLITE_VERSION_NUMBER 3007015
678 #define SQLITE_SOURCE_ID "2012-11-09 21:40:02 5a3b07f0f5dfae7eea870303f52f37d6a17f1da2"
679
680 /*
681 ** CAPI3REF: Run-Time Library Version Numbers
682 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
683 **
@@ -1038,10 +1038,11 @@
1038 #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
1039 #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
1040 #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
1041 #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
1042 #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
1043 #define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8))
1044 #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
1045 #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
1046 #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
1047 #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
1048 #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
@@ -11008,10 +11009,11 @@
11009 int addrInTop; /* Top of the IN loop */
11010 } *aInLoop; /* Information about each nested IN operator */
11011 } in; /* Used when plan.wsFlags&WHERE_IN_ABLE */
11012 Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */
11013 } u;
11014 double rOptCost; /* "Optimal" cost for this level */
11015
11016 /* The following field is really not part of the current level. But
11017 ** we need a place to cache virtual table index information for each
11018 ** virtual table in the FROM clause and the WhereLevel structure is
11019 ** a convenient place since there is one WhereLevel for each FROM clause
@@ -13716,10 +13718,11 @@
13718 int nByte = 0; /* Used to accumulate return value */
13719
13720 db->pnBytesFreed = &nByte;
13721 for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
13722 sqlite3VdbeClearObject(db, pVdbe);
13723 sqlite3DbFree(db, pVdbe);
13724 }
13725 db->pnBytesFreed = 0;
13726
13727 *pHighwater = 0;
13728 *pCurrent = nByte;
@@ -28219,12 +28222,17 @@
28222 int dirSync /* If true, fsync() directory after deleting file */
28223 ){
28224 int rc = SQLITE_OK;
28225 UNUSED_PARAMETER(NotUsed);
28226 SimulateIOError(return SQLITE_IOERR_DELETE);
28227 if( osUnlink(zPath)==(-1) ){
28228 if( errno==ENOENT ){
28229 rc = SQLITE_IOERR_DELETE_NOENT;
28230 }else{
28231 rc = unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
28232 }
28233 return rc;
28234 }
28235 #ifndef SQLITE_DISABLE_DIRSYNC
28236 if( (dirSync & 1)!=0 ){
28237 int fd;
28238 rc = osOpenDirectory(zPath, &fd);
@@ -40388,10 +40396,11 @@
40396
40397 rc = pagerPagecount(pPager, &nPage);
40398 if( rc ) return rc;
40399 if( nPage==0 ){
40400 rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
40401 if( rc==SQLITE_IOERR_DELETE_NOENT ) rc = SQLITE_OK;
40402 isWal = 0;
40403 }else{
40404 rc = sqlite3OsAccess(
40405 pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal
40406 );
@@ -77655,12 +77664,14 @@
77664 */
77665 assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
77666 ExprSetIrreducible(pExpr);
77667 pExpr->iAgg = (i16)i;
77668 pExpr->pAggInfo = pAggInfo;
77669 return WRC_Prune;
77670 }else{
77671 return WRC_Continue;
77672 }
 
77673 }
77674 }
77675 return WRC_Continue;
77676 }
77677 static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
@@ -77668,13 +77679,14 @@
77679 UNUSED_PARAMETER(pSelect);
77680 return WRC_Continue;
77681 }
77682
77683 /*
77684 ** Analyze the pExpr expression looking for aggregate functions and
77685 ** for variables that need to be added to AggInfo object that pNC->pAggInfo
77686 ** points to. Additional entries are made on the AggInfo object as
77687 ** necessary.
77688 **
77689 ** This routine should only be called after the expression has been
77690 ** analyzed by sqlite3ResolveExprNames().
77691 */
77692 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
@@ -85700,10 +85712,59 @@
85712 sqlite3_result_double(context, rVal);
85713 break;
85714 }
85715 }
85716 }
85717
85718 /*
85719 ** Implementation of the instr() function.
85720 **
85721 ** instr(haystack,needle) finds the first occurrence of needle
85722 ** in haystack and returns the number of previous characters plus 1,
85723 ** or 0 if needle does not occur within haystack.
85724 **
85725 ** If both haystack and needle are BLOBs, then the result is one more than
85726 ** the number of bytes in haystack prior to the first occurrence of needle,
85727 ** or 0 if needle never occurs in haystack.
85728 */
85729 static void instrFunc(
85730 sqlite3_context *context,
85731 int argc,
85732 sqlite3_value **argv
85733 ){
85734 const unsigned char *zHaystack;
85735 const unsigned char *zNeedle;
85736 int nHaystack;
85737 int nNeedle;
85738 int typeHaystack, typeNeedle;
85739 int N = 1;
85740 int isText;
85741
85742 typeHaystack = sqlite3_value_type(argv[0]);
85743 typeNeedle = sqlite3_value_type(argv[1]);
85744 if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return;
85745 nHaystack = sqlite3_value_bytes(argv[0]);
85746 nNeedle = sqlite3_value_bytes(argv[1]);
85747 if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){
85748 zHaystack = sqlite3_value_blob(argv[0]);
85749 zNeedle = sqlite3_value_blob(argv[1]);
85750 isText = 0;
85751 }else{
85752 zHaystack = sqlite3_value_text(argv[0]);
85753 zNeedle = sqlite3_value_text(argv[1]);
85754 isText = 1;
85755 }
85756 while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){
85757 N++;
85758 do{
85759 nHaystack--;
85760 zHaystack++;
85761 }while( isText && (zHaystack[0]&0xc0)==0x80 );
85762 }
85763 if( nNeedle>nHaystack ) N = 0;
85764 sqlite3_result_int(context, N);
85765 }
85766
85767 /*
85768 ** Implementation of the substr() function.
85769 **
85770 ** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
@@ -87069,10 +87130,11 @@
87130 FUNCTION(max, -1, 1, 1, minmaxFunc ),
87131 FUNCTION(max, 0, 1, 1, 0 ),
87132 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
87133 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
87134 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
87135 FUNCTION(instr, 2, 0, 0, instrFunc ),
87136 FUNCTION(substr, 2, 0, 0, substrFunc ),
87137 FUNCTION(substr, 3, 0, 0, substrFunc ),
87138 FUNCTION(abs, 1, 0, 0, absFunc ),
87139 #ifndef SQLITE_OMIT_FLOATING_POINT
87140 FUNCTION(round, 1, 0, 0, roundFunc ),
@@ -107298,19 +107360,32 @@
107360 || sWBI.cost.plan.u.pIdx==sWBI.pSrc->pIndex );
107361
107362 if( isOptimal && (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){
107363 notIndexed |= m;
107364 }
107365 if( isOptimal ){
107366 pWInfo->a[j].rOptCost = sWBI.cost.rCost;
107367 }else if( iFrom<nTabList-1 ){
107368 /* If two or more tables have nearly the same outer loop cost,
107369 ** very different inner loop (optimal) cost, we want to choose
107370 ** for the outer loop that table which benefits the least from
107371 ** being in the inner loop. The following code scales the
107372 ** outer loop cost estimate to accomplish that. */
107373 WHERETRACE((" scaling cost from %.1f to %.1f\n",
107374 sWBI.cost.rCost,
107375 sWBI.cost.rCost/pWInfo->a[j].rOptCost));
107376 sWBI.cost.rCost /= pWInfo->a[j].rOptCost;
107377 }
107378
107379 /* Conditions under which this table becomes the best so far:
107380 **
107381 ** (1) The table must not depend on other tables that have not
107382 ** yet run. (In other words, it must not depend on tables
107383 ** in inner loops.)
107384 **
107385 ** (2) (This rule was removed on 2012-11-09. The scaling of the
107386 ** cost using the optimal scan cost made this rule obsolete.)
107387 **
107388 ** (3) All tables have an INDEXED BY clause or this table lacks an
107389 ** INDEXED BY clause or this table uses the specific
107390 ** index specified by its INDEXED BY clause. This rule ensures
107391 ** that a best-so-far is always selected even if an impossible
@@ -107321,13 +107396,10 @@
107396 **
107397 ** (4) The plan cost must be lower than prior plans, where "cost"
107398 ** is defined by the compareCost() function above.
107399 */
107400 if( (sWBI.cost.used&sWBI.notValid)==0 /* (1) */
 
 
 
107401 && (nUnconstrained==0 || sWBI.pSrc->pIndex==0 /* (3) */
107402 || NEVER((sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
107403 && (bestJ<0 || compareCost(&sWBI.cost, &bestPlan)) /* (4) */
107404 ){
107405 WHERETRACE((" === table %d (%s) is best so far\n"
107406
+2 -1
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107107
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108108
** [sqlite_version()] and [sqlite_source_id()].
109109
*/
110110
#define SQLITE_VERSION "3.7.15"
111111
#define SQLITE_VERSION_NUMBER 3007015
112
-#define SQLITE_SOURCE_ID "2012-10-30 18:09:46 9dca18f5fea84afbecb314ee1cdfb98430656af3"
112
+#define SQLITE_SOURCE_ID "2012-11-09 21:40:02 5a3b07f0f5dfae7eea870303f52f37d6a17f1da2"
113113
114114
/*
115115
** CAPI3REF: Run-Time Library Version Numbers
116116
** KEYWORDS: sqlite3_version, sqlite3_sourceid
117117
**
@@ -472,10 +472,11 @@
472472
#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
473473
#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
474474
#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
475475
#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
476476
#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
477
+#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8))
477478
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
478479
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
479480
#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
480481
#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
481482
#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
482483
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 ** [sqlite_version()] and [sqlite_source_id()].
109 */
110 #define SQLITE_VERSION "3.7.15"
111 #define SQLITE_VERSION_NUMBER 3007015
112 #define SQLITE_SOURCE_ID "2012-10-30 18:09:46 9dca18f5fea84afbecb314ee1cdfb98430656af3"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
@@ -472,10 +472,11 @@
472 #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
473 #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
474 #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
475 #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
476 #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
 
477 #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
478 #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
479 #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
480 #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
481 #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
482
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 ** [sqlite_version()] and [sqlite_source_id()].
109 */
110 #define SQLITE_VERSION "3.7.15"
111 #define SQLITE_VERSION_NUMBER 3007015
112 #define SQLITE_SOURCE_ID "2012-11-09 21:40:02 5a3b07f0f5dfae7eea870303f52f37d6a17f1da2"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
@@ -472,10 +472,11 @@
472 #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
473 #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
474 #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
475 #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
476 #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
477 #define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8))
478 #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
479 #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
480 #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
481 #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
482 #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
483
+2 -2
--- src/timeline.c
+++ src/timeline.c
@@ -276,11 +276,11 @@
276276
prevWasDivider = 0;
277277
if( memcmp(zDate, zPrevDate, 10) ){
278278
sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate);
279279
@ <tr><td>
280280
@ <div class="divider">%s(zPrevDate)</div>
281
- @ </td></tr>
281
+ @ </td><td></td><td></td></tr>
282282
}
283283
memcpy(zTime, &zDate[11], 5);
284284
zTime[5] = 0;
285285
@ <tr>
286286
@ <td class="timelineTime">%s(zTime)</td>
@@ -494,11 +494,11 @@
494494
/* style is not moved to css, because this is
495495
** a technical div for the timeline graph
496496
*/
497497
@ <tr><td></td><td>
498498
@ <div id="grbtm" style="width:%d(pGraph->mxRail*20+30)px;"></div>
499
- @ </td></tr>
499
+ @ </td><td></td></tr>
500500
}
501501
}
502502
@ </table>
503503
if( fchngQueryInit ) db_finalize(&fchngQuery);
504504
timeline_output_graph_javascript(pGraph, (tmFlags & TIMELINE_DISJOINT)!=0);
505505
--- src/timeline.c
+++ src/timeline.c
@@ -276,11 +276,11 @@
276 prevWasDivider = 0;
277 if( memcmp(zDate, zPrevDate, 10) ){
278 sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate);
279 @ <tr><td>
280 @ <div class="divider">%s(zPrevDate)</div>
281 @ </td></tr>
282 }
283 memcpy(zTime, &zDate[11], 5);
284 zTime[5] = 0;
285 @ <tr>
286 @ <td class="timelineTime">%s(zTime)</td>
@@ -494,11 +494,11 @@
494 /* style is not moved to css, because this is
495 ** a technical div for the timeline graph
496 */
497 @ <tr><td></td><td>
498 @ <div id="grbtm" style="width:%d(pGraph->mxRail*20+30)px;"></div>
499 @ </td></tr>
500 }
501 }
502 @ </table>
503 if( fchngQueryInit ) db_finalize(&fchngQuery);
504 timeline_output_graph_javascript(pGraph, (tmFlags & TIMELINE_DISJOINT)!=0);
505
--- src/timeline.c
+++ src/timeline.c
@@ -276,11 +276,11 @@
276 prevWasDivider = 0;
277 if( memcmp(zDate, zPrevDate, 10) ){
278 sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate);
279 @ <tr><td>
280 @ <div class="divider">%s(zPrevDate)</div>
281 @ </td><td></td><td></td></tr>
282 }
283 memcpy(zTime, &zDate[11], 5);
284 zTime[5] = 0;
285 @ <tr>
286 @ <td class="timelineTime">%s(zTime)</td>
@@ -494,11 +494,11 @@
494 /* style is not moved to css, because this is
495 ** a technical div for the timeline graph
496 */
497 @ <tr><td></td><td>
498 @ <div id="grbtm" style="width:%d(pGraph->mxRail*20+30)px;"></div>
499 @ </td><td></td></tr>
500 }
501 }
502 @ </table>
503 if( fchngQueryInit ) db_finalize(&fchngQuery);
504 timeline_output_graph_javascript(pGraph, (tmFlags & TIMELINE_DISJOINT)!=0);
505
+2 -2
--- src/wysiwyg.c
+++ src/wysiwyg.c
@@ -173,17 +173,17 @@
173173
@ R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P/////////
174174
@ //////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2Cekk
175175
@ ErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrT
176176
@ q/b7/i8fp8PAQA7" />
177177
178
- @ <img class="intLink" title="Add indentation"
178
+ @ <img class="intLink" title="Delete indentation"
179179
@ onclick="formatDoc('outdent');"
180180
@ src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P
181181
@ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMcz
182182
@ sYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" />
183183
184
- @ <img class="intLink" title="Delete indentation"
184
+ @ <img class="intLink" title="Add indentation"
185185
@ onclick="formatDoc('indent');"
186186
@ src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3N
187187
@ Ha7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650
188188
@ B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw==">
189189
190190
--- src/wysiwyg.c
+++ src/wysiwyg.c
@@ -173,17 +173,17 @@
173 @ R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P/////////
174 @ //////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2Cekk
175 @ ErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrT
176 @ q/b7/i8fp8PAQA7" />
177
178 @ <img class="intLink" title="Add indentation"
179 @ onclick="formatDoc('outdent');"
180 @ src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P
181 @ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMcz
182 @ sYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" />
183
184 @ <img class="intLink" title="Delete indentation"
185 @ onclick="formatDoc('indent');"
186 @ src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3N
187 @ Ha7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650
188 @ B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw==">
189
190
--- src/wysiwyg.c
+++ src/wysiwyg.c
@@ -173,17 +173,17 @@
173 @ R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P/////////
174 @ //////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2Cekk
175 @ ErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrT
176 @ q/b7/i8fp8PAQA7" />
177
178 @ <img class="intLink" title="Delete indentation"
179 @ onclick="formatDoc('outdent');"
180 @ src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P
181 @ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMcz
182 @ sYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" />
183
184 @ <img class="intLink" title="Add indentation"
185 @ onclick="formatDoc('indent');"
186 @ src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3N
187 @ Ha7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650
188 @ B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw==">
189
190

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button