• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 2005 February 14
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.  The
12# focus of this file is testing the CREATE INDEX statement.
13#
14# $Id: index3.test,v 1.3 2008/03/19 13:03:34 drh Exp $
15
16
17set testdir [file dirname $argv0]
18source $testdir/tester.tcl
19
20# Ticket #1115.  Make sure that when a UNIQUE index is created on a
21# non-unique column (or columns) that it fails and that it leaves no
22# residue behind.
23#
24do_test index3-1.1 {
25  execsql {
26    CREATE TABLE t1(a);
27    INSERT INTO t1 VALUES(1);
28    INSERT INTO t1 VALUES(1);
29    SELECT * FROM t1;
30  }
31} {1 1}
32do_test index3-1.2 {
33  catchsql {
34    BEGIN;
35    CREATE UNIQUE INDEX i1 ON t1(a);
36  }
37} {1 {indexed columns are not unique}}
38do_test index3-1.3 {
39  catchsql COMMIT;
40} {0 {}}
41integrity_check index3-1.4
42
43# This test corrupts the database file so it must be the last test
44# in the series.
45#
46do_test index3-99.1 {
47  execsql {
48    PRAGMA writable_schema=on;
49    UPDATE sqlite_master SET sql='nonsense';
50  }
51  db close
52  catch { sqlite3 db test.db }
53  catchsql { DROP INDEX i1 }
54} {1 {malformed database schema (t1) - near "nonsense": syntax error}}
55
56finish_test
57