File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / ptrchng.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 4 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: # 2007 April 27
    2: #
    3: # The author disclaims copyright to this source code.  In place of
    4: # a legal notice, here is a blessing:
    5: #
    6: #    May you do good and not evil.
    7: #    May you find forgiveness for yourself and forgive others.
    8: #    May you share freely, never taking more than you give.
    9: #
   10: #***********************************************************************
   11: # This file implements regression tests for SQLite library.
   12: #
   13: # The focus of the tests in this file are to verify that the
   14: # underlying TEXT or BLOB representation of an sqlite3_value
   15: # changes appropriately when APIs from the following set are
   16: # called:
   17: #
   18: #     sqlite3_value_text()
   19: #     sqlite3_value_text16()
   20: #     sqlite3_value_blob()
   21: #     sqlite3_value_bytes()
   22: #     sqlite3_value_bytes16()
   23: #
   24: # $Id: ptrchng.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
   25: 
   26: set testdir [file dirname $argv0]
   27: source $testdir/tester.tcl
   28: 
   29: ifcapable !bloblit {
   30:   finish_test
   31:   return
   32: }
   33: 
   34: # Register the "pointer_change" SQL function.
   35: #
   36: sqlite3_create_function db
   37: 
   38: do_test ptrchng-1.1 {
   39:   execsql {
   40:     CREATE TABLE t1(x INTEGER PRIMARY KEY, y BLOB);
   41:     INSERT INTO t1 VALUES(1, 'abc');
   42:     INSERT INTO t1 VALUES(2, 
   43:        'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234356789');
   44:     INSERT INTO t1 VALUES(3, x'626c6f62');
   45:     INSERT INTO t1 VALUES(4,
   46:  x'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324'
   47:     );
   48:     SELECT count(*) FROM t1;
   49:   }
   50: } {4}
   51: 
   52: # For the short entries that fit in the Mem.zBuf[], the pointer should
   53: # never change regardless of what type conversions occur.
   54: #
   55: # UPDATE: No longer true, as Mem.zBuf[] has been removed.
   56: #
   57: do_test ptrchng-2.1 {
   58:   execsql {
   59:     SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=1
   60:   }
   61: } {0}
   62: do_test ptrchng-2.2 {
   63:   execsql {
   64:     SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=1
   65:   }
   66: } {0}
   67: ifcapable utf16 {
   68:   do_test ptrchng-2.3 {
   69:     execsql {
   70:       SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=1
   71:     }
   72:   } {1}
   73:   do_test ptrchng-2.4 {
   74:     execsql {
   75:       SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=1
   76:     }
   77:   } {1}
   78:   do_test ptrchng-2.5 {
   79:     execsql {
   80:       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=1
   81:     }
   82:   } {0}
   83:   do_test ptrchng-2.6 {
   84:     execsql {
   85:       SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=1
   86:     }
   87:   } {1}
   88: }
   89: do_test ptrchng-2.11 {
   90:   execsql {
   91:     SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=3
   92:   }
   93: } {0}
   94: do_test ptrchng-2.12 {
   95:   execsql {
   96:     SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=3
   97:   }
   98: } {0}
   99: ifcapable utf16 {
  100:   do_test ptrchng-2.13 {
  101:     execsql {
  102:       SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=3
  103:     }
  104:   } {1}
  105:   do_test ptrchng-2.14 {
  106:     execsql {
  107:       SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=3
  108:     }
  109:   } {1}
  110:   do_test ptrchng-2.15 {
  111:     execsql {
  112:       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=3
  113:     }
  114:   } {0}
  115:   do_test ptrchng-2.16 {
  116:     execsql {
  117:       SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=3
  118:     }
  119:   } {1}
  120: }
  121: 
  122: # For the long entries that do not fit in the Mem.zBuf[], the pointer
  123: # should change sometimes.
  124: #
  125: do_test ptrchng-3.1 {
  126:   execsql {
  127:     SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=2
  128:   }
  129: } {0}
  130: do_test ptrchng-3.2 {
  131:   execsql {
  132:     SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=2
  133:   }
  134: } {0}
  135: ifcapable utf16 {
  136:   do_test ptrchng-3.3 {
  137:     execsql {
  138:       SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=2
  139:     }
  140:   } {1}
  141:   do_test ptrchng-3.4 {
  142:     execsql {
  143:       SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=2
  144:     }
  145:   } {1}
  146:   do_test ptrchng-3.5 {
  147:     execsql {
  148:       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=2
  149:     }
  150:   } {0}
  151:   do_test ptrchng-3.6 {
  152:     execsql {
  153:       SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=2
  154:     }
  155:   } {1}
  156: }
  157: do_test ptrchng-3.11 {
  158:   execsql {
  159:     SELECT pointer_change(y, 'text', 'noop', 'blob') FROM t1 WHERE x=4
  160:   }
  161: } {0}
  162: do_test ptrchng-3.12 {
  163:   execsql {
  164:     SELECT pointer_change(y, 'blob', 'noop', 'text') FROM t1 WHERE x=4
  165:   }
  166: } {0}
  167: ifcapable utf16 {
  168:   do_test ptrchng-3.13 {
  169:     execsql {
  170:       SELECT pointer_change(y, 'text', 'noop', 'text16') FROM t1 WHERE x=4
  171:     }
  172:   } {1}
  173:   do_test ptrchng-3.14 {
  174:     execsql {
  175:       SELECT pointer_change(y, 'blob', 'noop', 'text16') FROM t1 WHERE x=4
  176:     }
  177:   } {1}
  178:   do_test ptrchng-3.15 {
  179:     execsql {
  180:       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1 WHERE x=4
  181:     }
  182:   } {0}
  183:   do_test ptrchng-3.16 {
  184:     execsql {
  185:       SELECT pointer_change(y, 'text16', 'noop', 'text') FROM t1 WHERE x=4
  186:     }
  187:   } {1}
  188: }
  189: 
  190: # A call to _bytes() should never reformat a _text() or _blob().
  191: #
  192: do_test ptrchng-4.1 {
  193:   execsql {
  194:     SELECT pointer_change(y, 'text', 'bytes', 'text') FROM t1
  195:   }
  196: } {0 0 0 0}
  197: do_test ptrchng-4.2 {
  198:   execsql {
  199:     SELECT pointer_change(y, 'blob', 'bytes', 'blob') FROM t1
  200:   }
  201: } {0 0 0 0}
  202: 
  203: # A call to _blob() should never trigger a reformat
  204: #
  205: do_test ptrchng-5.1 {
  206:   execsql {
  207:     SELECT pointer_change(y, 'text', 'bytes', 'blob') FROM t1
  208:   }
  209: } {0 0 0 0}
  210: ifcapable utf16 {
  211:   do_test ptrchng-5.2 {
  212:     execsql {
  213:       SELECT pointer_change(y, 'text16', 'noop', 'blob') FROM t1
  214:     }
  215:   } {0 0 0 0}
  216:   do_test ptrchng-5.3 {
  217:     execsql {
  218:       SELECT pointer_change(y, 'text16', 'bytes16', 'blob') FROM t1
  219:     }
  220:   } {0 0 0 0}
  221: }
  222: 
  223: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>