rbu7.test 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # 2014 October 21
  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. #
  12. # This file contains tests for the RBU module.
  13. #
  14. source [file join [file dirname [info script]] rbu_common.tcl]
  15. if_no_rbu_support { finish_test ; return }
  16. set ::testprefix rbu7
  17. # Test index:
  18. #
  19. # 1.*: That affinities are correctly applied to values within the
  20. # RBU database.
  21. #
  22. # 2.*: Tests for multi-column primary keys.
  23. #
  24. do_test 1.0 {
  25. execsql {
  26. CREATE TABLE t1(a INT PRIMARY KEY, b) WITHOUT ROWID;
  27. INSERT INTO t1 VALUES(1, 'abc');
  28. INSERT INTO t1 VALUES(2, 'def');
  29. }
  30. forcedelete rbu.db
  31. sqlite3 rbu rbu.db
  32. rbu eval {
  33. CREATE TABLE data_t1(a, b, rbu_control);
  34. INSERT INTO data_t1 VALUES('1', NULL, 1);
  35. }
  36. rbu close
  37. } {}
  38. do_test 1.1 {
  39. sqlite3rbu rbu test.db rbu.db
  40. while { [rbu step]=="SQLITE_OK" } {}
  41. rbu close
  42. } {SQLITE_DONE}
  43. sqlite3 db test.db
  44. do_execsql_test 1.2 {
  45. SELECT * FROM t1
  46. } {2 def}
  47. #-------------------------------------------------------------------------
  48. #
  49. foreach {tn tbl} {
  50. 1 { CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)) WITHOUT ROWID }
  51. 2 { CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)) }
  52. } {
  53. reset_db
  54. execsql $tbl
  55. do_execsql_test 2.$tn.1 {
  56. CREATE INDEX t1c ON t1(c);
  57. INSERT INTO t1 VALUES(1, 1, 'a');
  58. INSERT INTO t1 VALUES(1, 2, 'b');
  59. INSERT INTO t1 VALUES(2, 1, 'c');
  60. INSERT INTO t1 VALUES(2, 2, 'd');
  61. }
  62. do_test 2.$tn.2 {
  63. forcedelete rbu.db
  64. sqlite3 rbu rbu.db
  65. execsql {
  66. CREATE TABLE data_t1(a, b, c, rbu_control);
  67. INSERT INTO data_t1 VALUES(3, 1, 'e', 0);
  68. INSERT INTO data_t1 VALUES(3, 2, 'f', 0);
  69. INSERT INTO data_t1 VALUES(1, 2, NULL, 1);
  70. INSERT INTO data_t1 VALUES(2, 1, 'X', '..x');
  71. } rbu
  72. rbu close
  73. } {}
  74. do_test 2.$tn.3 {
  75. set rc "SQLITE_OK"
  76. while {$rc == "SQLITE_OK"} {
  77. sqlite3rbu rbu test.db rbu.db
  78. rbu step
  79. set rc [rbu close]
  80. }
  81. set rc
  82. } {SQLITE_DONE}
  83. do_execsql_test 2.$tn.1 {
  84. SELECT * FROM t1 ORDER BY a, b
  85. } {
  86. 1 1 a
  87. 2 1 X
  88. 2 2 d
  89. 3 1 e
  90. 3 2 f
  91. }
  92. }
  93. finish_test