github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/ptrchng.test (about)

     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