Annotation of embedaddon/sqlite3/test/ptrchng.test, revision 1.1

1.1     ! misho       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.5 2008/07/12 14:52:20 drh 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>