Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | speed tweaks and documentation updates (CVS 170) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b46f9a317b06bd490bda987e11e24f2c |
User & Date: | drh 2000-12-10 18:35:20.000 |
Context
2000-12-10
| ||
18:40 | Version 1.0.17 (CVS 486) (check-in: bee0c81859 user: drh tags: trunk) | |
18:35 | speed tweaks and documentation updates (CVS 170) (check-in: b46f9a317b user: drh tags: trunk) | |
18:23 | speed tweaks and documentation updates (CVS 169) (check-in: 00c3dfd025 user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
37 38 39 40 41 42 43 | ** inplicit conversion from one type to the other occurs as necessary. ** ** Most of the code in this file is taken up by the sqliteVdbeExec() ** function which does the work of interpreting a VDBE program. ** But other routines are also provided to help in building up ** a program instruction by instruction. ** | | | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | ** inplicit conversion from one type to the other occurs as necessary. ** ** Most of the code in this file is taken up by the sqliteVdbeExec() ** function which does the work of interpreting a VDBE program. ** But other routines are also provided to help in building up ** a program instruction by instruction. ** ** $Id: vdbe.c,v 1.49 2000/12/10 18:35:20 drh Exp $ */ #include "sqliteInt.h" #include <unistd.h> #include <ctype.h> /* ** SQL is translated into a sequence of instructions to be |
︙ | ︙ | |||
1278 1279 1280 1281 1282 1283 1284 | case OP_Multiply: b *= a; break; default: { if( a==0 ) goto divide_by_zero; b /= a; break; } } | | | | 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 | case OP_Multiply: b *= a; break; default: { if( a==0 ) goto divide_by_zero; b /= a; break; } } POPSTACK; Release(p, nos); aStack[nos].i = b; aStack[nos].flags = STK_Int; }else{ double a, b; Realify(p, tos); Realify(p, nos); a = aStack[tos].r; |
︙ | ︙ | |||
1467 1468 1469 1470 1471 1472 1473 | case OP_Eq: c = c==0; break; case OP_Ne: c = c!=0; break; case OP_Lt: c = c<0; break; case OP_Le: c = c<=0; break; case OP_Gt: c = c>0; break; default: c = c>=0; break; } | | > | 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 | case OP_Eq: c = c==0; break; case OP_Ne: c = c!=0; break; case OP_Lt: c = c<0; break; case OP_Le: c = c<=0; break; case OP_Gt: c = c>0; break; default: c = c>=0; break; } POPSTACK; POPSTACK; if( c ) pc = pOp->p2-1; break; } /* Opcode: Like P1 P2 * ** ** Pop the top two elements from the stack. The top-most is a |
︙ | ︙ | |||
1495 1496 1497 1498 1499 1500 1501 | int tos = p->tos; int nos = tos - 1; int c; VERIFY( if( nos<0 ) goto not_enough_stack; ) Stringify(p, tos); Stringify(p, nos); c = sqliteLikeCompare(zStack[tos], zStack[nos]); | | > | 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 | int tos = p->tos; int nos = tos - 1; int c; VERIFY( if( nos<0 ) goto not_enough_stack; ) Stringify(p, tos); Stringify(p, nos); c = sqliteLikeCompare(zStack[tos], zStack[nos]); POPSTACK; POPSTACK; if( pOp->p1 ) c = !c; if( c ) pc = pOp->p2-1; break; } /* Opcode: Glob P1 P2 * ** |
︙ | ︙ | |||
1527 1528 1529 1530 1531 1532 1533 | int tos = p->tos; int nos = tos - 1; int c; VERIFY( if( nos<0 ) goto not_enough_stack; ) Stringify(p, tos); Stringify(p, nos); c = sqliteGlobCompare(zStack[tos], zStack[nos]); | | > | 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 | int tos = p->tos; int nos = tos - 1; int c; VERIFY( if( nos<0 ) goto not_enough_stack; ) Stringify(p, tos); Stringify(p, nos); c = sqliteGlobCompare(zStack[tos], zStack[nos]); POPSTACK; POPSTACK; if( pOp->p1 ) c = !c; if( c ) pc = pOp->p2-1; break; } /* Opcode: And * * * ** |
︙ | ︙ | |||
1558 1559 1560 1561 1562 1563 1564 | Integerify(p, tos); Integerify(p, nos); if( pOp->opcode==OP_And ){ c = aStack[tos].i && aStack[nos].i; }else{ c = aStack[tos].i || aStack[nos].i; } | > | < | 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 | Integerify(p, tos); Integerify(p, nos); if( pOp->opcode==OP_And ){ c = aStack[tos].i && aStack[nos].i; }else{ c = aStack[tos].i || aStack[nos].i; } POPSTACK; Release(p, nos); aStack[nos].i = c; aStack[nos].flags = STK_Int; break; } /* Opcode: Negative * * * ** |
︙ | ︙ | |||
1996 1997 1998 1999 2000 2001 2002 | }else{ nKey = sizeof(int); zKey = (char*)&aStack[nos].i; } pBe->Put(p->aCsr[i].pCursor, nKey, zKey, aStack[tos].n, zStack[tos]); } | | > | 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 | }else{ nKey = sizeof(int); zKey = (char*)&aStack[nos].i; } pBe->Put(p->aCsr[i].pCursor, nKey, zKey, aStack[tos].n, zStack[tos]); } POPSTACK; POPSTACK; break; } /* Opcode: Delete P1 * * ** ** The top of the stack is a key. Remove this key and its data ** from database file P1. Then pop the stack to discard the key. |
︙ | ︙ | |||
2292 2293 2294 2295 2296 2297 2298 | pBe->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int)*nIdx, (char*)aIdx); sqliteFree(aIdx); } } } } | | > | 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 | pBe->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int)*nIdx, (char*)aIdx); sqliteFree(aIdx); } } } } POPSTACK; POPSTACK; break; } /* Opcode: DeleteIdx P1 * * ** ** The top of the stack is a key and next on stack is integer ** which is the key to a record in an SQL table. |
︙ | ︙ | |||
2344 2345 2346 2347 2348 2349 2350 | if( aIdx[0]*3 + 1 < nIdx ){ nIdx /= 2; } pBe->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int)*nIdx, (char*)aIdx); } } | | > | 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 | if( aIdx[0]*3 + 1 < nIdx ){ nIdx /= 2; } pBe->Put(pCrsr, aStack[tos].n, zStack[tos], sizeof(int)*nIdx, (char*)aIdx); } } POPSTACK; POPSTACK; break; } /* Opcode: Destroy * * P3 ** ** Drop the disk file whose name is P3. All key/data pairs in ** the file are deleted and the file itself is removed |
︙ | ︙ |