/ Hex Artifact Content
Login

Artifact 583411e470458c5d76148542cfb5a5fa84c8f93e:


0000: 23 20 32 30 31 30 20 4e 6f 76 65 6d 62 65 72 20  # 2010 November 
0010: 33 30 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  30.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 0a 23 20 54 68 69  ********.#.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 74 65 73 74 73 20 74 6f 20 76 65 72 69 66  s tests to verif
0190: 79 20 74 68 61 74 20 74 68 65 20 22 74 65 73 74  y that the "test
01a0: 61 62 6c 65 20 73 74 61 74 65 6d 65 6e 74 73 22  able statements"
01b0: 20 69 6e 20 0a 23 20 74 68 65 20 6c 61 6e 67 5f   in .# the lang_
01c0: 64 72 6f 70 76 69 65 77 2e 68 74 6d 6c 20 64 6f  dropview.html do
01d0: 63 75 6d 65 6e 74 20 61 72 65 20 63 6f 72 72 65  cument are corre
01e0: 63 74 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64  ct..#..set testd
01f0: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0200: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0210: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0220: 74 63 6c 0a 73 65 74 20 3a 3a 74 65 73 74 70 72  tcl.set ::testpr
0230: 65 66 69 78 20 65 5f 64 72 6f 70 76 69 65 77 0a  efix e_dropview.
0240: 0a 70 72 6f 63 20 64 72 6f 70 76 69 65 77 5f 72  .proc dropview_r
0250: 65 6f 70 65 6e 5f 64 62 20 7b 7d 20 7b 0a 20 20  eopen_db {} {.  
0260: 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65  db close.  force
0270: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74  delete test.db t
0280: 65 73 74 2e 64 62 32 0a 20 20 73 71 6c 69 74 65  est.db2.  sqlite
0290: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 20 20  3 db test.db..  
02a0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 41 54  db eval {.    AT
02b0: 54 41 43 48 20 27 74 65 73 74 2e 64 62 32 27 20  TACH 'test.db2' 
02c0: 41 53 20 61 75 78 3b 0a 20 20 20 20 43 52 45 41  AS aux;.    CREA
02d0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
02e0: 29 3b 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ); .    INSERT I
02f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 61  NTO t1 VALUES('a
0300: 20 6d 61 69 6e 27 2c 20 27 62 20 6d 61 69 6e 27   main', 'b main'
0310: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  );.    CREATE VI
0320: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
0330: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43  * FROM t1;.    C
0340: 52 45 41 54 45 20 56 49 45 57 20 76 32 20 41 53  REATE VIEW v2 AS
0350: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0360: 31 3b 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54  1;..    CREATE T
0370: 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 20  EMP TABLE t1(a, 
0380: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
0390: 4e 54 4f 20 74 65 6d 70 2e 74 31 20 56 41 4c 55  NTO temp.t1 VALU
03a0: 45 53 28 27 61 20 74 65 6d 70 27 2c 20 27 62 20  ES('a temp', 'b 
03b0: 74 65 6d 70 27 29 3b 0a 20 20 20 20 43 52 45 41  temp');.    CREA
03c0: 54 45 20 56 49 45 57 20 74 65 6d 70 2e 76 31 20  TE VIEW temp.v1 
03d0: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
03e0: 20 74 31 3b 0a 0a 20 20 20 20 43 52 45 41 54 45   t1;..    CREATE
03f0: 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28 61 2c   TABLE aux.t1(a,
0400: 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   b);.    INSERT 
0410: 49 4e 54 4f 20 61 75 78 2e 74 31 20 56 41 4c 55  INTO aux.t1 VALU
0420: 45 53 28 27 61 20 61 75 78 27 2c 20 27 62 20 61  ES('a aux', 'b a
0430: 75 78 27 29 3b 0a 20 20 20 20 43 52 45 41 54 45  ux');.    CREATE
0440: 20 56 49 45 57 20 61 75 78 2e 76 31 20 41 53 20   VIEW aux.v1 AS 
0450: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
0460: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  ;.    CREATE VIE
0470: 57 20 61 75 78 2e 76 32 20 41 53 20 53 45 4c 45  W aux.v2 AS SELE
0480: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
0490: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 61 75    CREATE VIEW au
04a0: 78 2e 76 33 20 41 53 20 53 45 4c 45 43 54 20 2a  x.v3 AS SELECT *
04b0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 0a   FROM t1;.  }.}.
04c0: 0a 70 72 6f 63 20 6c 69 73 74 5f 61 6c 6c 5f 76  .proc list_all_v
04d0: 69 65 77 73 20 7b 7b 64 62 20 64 62 7d 7d 20 7b  iews {{db db}} {
04e0: 0a 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73 74  .  set res [list
04f0: 5d 0a 20 20 24 64 62 20 65 76 61 6c 20 7b 20 50  ].  $db eval { P
0500: 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c  RAGMA database_l
0510: 69 73 74 20 7d 20 7b 0a 20 20 20 20 73 65 74 20  ist } {.    set 
0520: 74 62 6c 20 22 24 6e 61 6d 65 2e 73 71 6c 69 74  tbl "$name.sqlit
0530: 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 69 66  e_master".    if
0540: 20 7b 24 6e 61 6d 65 20 3d 3d 20 22 74 65 6d 70   {$name == "temp
0550: 22 7d 20 7b 20 73 65 74 20 74 62 6c 20 73 71 6c  "} { set tbl sql
0560: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20  ite_temp_master 
0570: 7d 0a 0a 20 20 20 20 73 65 74 20 73 71 6c 20 22  }..    set sql "
0580: 53 45 4c 45 43 54 20 27 24 6e 61 6d 65 2e 27 20  SELECT '$name.' 
0590: 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 24 74 62  || name FROM $tb
05a0: 6c 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27  l WHERE type = '
05b0: 76 69 65 77 27 22 0a 20 20 20 20 6c 61 70 70 65  view'".    lappe
05c0: 6e 64 20 72 65 73 20 7b 2a 7d 5b 24 64 62 20 65  nd res {*}[$db e
05d0: 76 61 6c 20 24 73 71 6c 5d 0a 20 20 7d 0a 20 20  val $sql].  }.  
05e0: 73 65 74 20 72 65 73 0a 7d 0a 0a 70 72 6f 63 20  set res.}..proc 
05f0: 6c 69 73 74 5f 61 6c 6c 5f 64 61 74 61 20 7b 7b  list_all_data {{
0600: 64 62 20 64 62 7d 7d 20 7b 0a 20 20 73 65 74 20  db db}} {.  set 
0610: 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20 24 64 62  res [list].  $db
0620: 20 65 76 61 6c 20 7b 20 50 52 41 47 4d 41 20 64   eval { PRAGMA d
0630: 61 74 61 62 61 73 65 5f 6c 69 73 74 20 7d 20 7b  atabase_list } {
0640: 0a 20 20 20 20 73 65 74 20 74 62 6c 20 22 24 6e  .    set tbl "$n
0650: 61 6d 65 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65  ame.sqlite_maste
0660: 72 22 0a 20 20 20 20 69 66 20 7b 24 6e 61 6d 65  r".    if {$name
0670: 20 3d 3d 20 22 74 65 6d 70 22 7d 20 7b 20 73 65   == "temp"} { se
0680: 74 20 74 62 6c 20 73 71 6c 69 74 65 5f 74 65 6d  t tbl sqlite_tem
0690: 70 5f 6d 61 73 74 65 72 20 7d 0a 0a 20 20 20 20  p_master }..    
06a0: 64 62 20 65 76 61 6c 20 22 53 45 4c 45 43 54 20  db eval "SELECT 
06b0: 27 24 6e 61 6d 65 2e 27 20 7c 7c 20 6e 61 6d 65  '$name.' || name
06c0: 20 41 53 20 78 20 46 52 4f 4d 20 24 74 62 6c 20   AS x FROM $tbl 
06d0: 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61  WHERE type = 'ta
06e0: 62 6c 65 27 22 20 7b 0a 20 20 20 20 20 20 6c 61  ble'" {.      la
06f0: 70 70 65 6e 64 20 72 65 73 20 5b 6c 69 73 74 20  ppend res [list 
0700: 24 78 20 5b 64 62 20 65 76 61 6c 20 22 53 45 4c  $x [db eval "SEL
0710: 45 43 54 20 2a 20 46 52 4f 4d 20 24 78 22 5d 5d  ECT * FROM $x"]]
0720: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 65 74  .    }.  }.  set
0730: 20 72 65 73 0a 7d 0a 0a 70 72 6f 63 20 64 6f 5f   res.}..proc do_
0740: 64 72 6f 70 76 69 65 77 5f 74 65 73 74 73 20 7b  dropview_tests {
0750: 6e 6d 20 61 72 67 73 7d 20 7b 0a 20 20 75 70 6c  nm args} {.  upl
0760: 65 76 65 6c 20 64 6f 5f 73 65 6c 65 63 74 5f 74  evel do_select_t
0770: 65 73 74 73 20 24 6e 6d 20 24 61 72 67 73 0a 7d  ests $nm $args.}
0780: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
0790: 20 52 2d 35 33 31 33 36 2d 33 36 34 33 36 20 2d   R-53136-36436 -
07a0: 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  - syntax diagram
07b0: 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a   drop-view-stmt.
07c0: 23 0a 23 20 41 6c 6c 20 70 61 74 68 73 20 69 6e  #.# All paths in
07d0: 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
07e0: 72 61 6d 20 66 6f 72 20 44 52 4f 50 20 56 49 45  ram for DROP VIE
07f0: 57 20 61 72 65 20 74 65 73 74 65 64 20 62 79 20  W are tested by 
0800: 74 65 73 74 73 20 31 2e 2a 2e 0a 23 0a 64 6f 5f  tests 1.*..#.do_
0810: 64 72 6f 70 76 69 65 77 5f 74 65 73 74 73 20 31  dropview_tests 1
0820: 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 64 72 6f   -repair {.  dro
0830: 70 76 69 65 77 5f 72 65 6f 70 65 6e 5f 64 62 0a  pview_reopen_db.
0840: 7d 20 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20 20  } -tclquery {.  
0850: 6c 69 73 74 5f 61 6c 6c 5f 76 69 65 77 73 0a 7d  list_all_views.}
0860: 20 7b 0a 20 20 31 20 20 20 22 44 52 4f 50 20 56   {.  1   "DROP V
0870: 49 45 57 20 76 31 22 20 20 20 20 20 20 20 20 20  IEW v1"         
0880: 20 20 20 20 20 20 20 20 20 7b 6d 61 69 6e 2e 76           {main.v
0890: 31 20 6d 61 69 6e 2e 76 32 20 61 75 78 2e 76 31  1 main.v2 aux.v1
08a0: 20 61 75 78 2e 76 32 20 61 75 78 2e 76 33 7d 0a   aux.v2 aux.v3}.
08b0: 20 20 32 20 20 20 22 44 52 4f 50 20 56 49 45 57    2   "DROP VIEW
08c0: 20 76 32 22 20 20 20 20 20 20 20 20 20 20 20 20   v2"            
08d0: 20 20 20 20 20 20 7b 6d 61 69 6e 2e 76 31 20 74        {main.v1 t
08e0: 65 6d 70 2e 76 31 20 61 75 78 2e 76 31 20 61 75  emp.v1 aux.v1 au
08f0: 78 2e 76 32 20 61 75 78 2e 76 33 7d 0a 20 20 33  x.v2 aux.v3}.  3
0900: 20 20 20 22 44 52 4f 50 20 56 49 45 57 20 6d 61     "DROP VIEW ma
0910: 69 6e 2e 76 31 22 20 20 20 20 20 20 20 20 20 20  in.v1"          
0920: 20 20 20 7b 6d 61 69 6e 2e 76 32 20 74 65 6d 70     {main.v2 temp
0930: 2e 76 31 20 61 75 78 2e 76 31 20 61 75 78 2e 76  .v1 aux.v1 aux.v
0940: 32 20 61 75 78 2e 76 33 7d 0a 20 20 34 20 20 20  2 aux.v3}.  4   
0950: 22 44 52 4f 50 20 56 49 45 57 20 6d 61 69 6e 2e  "DROP VIEW main.
0960: 76 32 22 20 20 20 20 20 20 20 20 20 20 20 20 20  v2"             
0970: 7b 6d 61 69 6e 2e 76 31 20 74 65 6d 70 2e 76 31  {main.v1 temp.v1
0980: 20 61 75 78 2e 76 31 20 61 75 78 2e 76 32 20 61   aux.v1 aux.v2 a
0990: 75 78 2e 76 33 7d 0a 20 20 35 20 20 20 22 44 52  ux.v3}.  5   "DR
09a0: 4f 50 20 56 49 45 57 20 49 46 20 45 58 49 53 54  OP VIEW IF EXIST
09b0: 53 20 76 31 22 20 20 20 20 20 20 20 20 7b 6d 61  S v1"        {ma
09c0: 69 6e 2e 76 31 20 6d 61 69 6e 2e 76 32 20 61 75  in.v1 main.v2 au
09d0: 78 2e 76 31 20 61 75 78 2e 76 32 20 61 75 78 2e  x.v1 aux.v2 aux.
09e0: 76 33 7d 0a 20 20 36 20 20 20 22 44 52 4f 50 20  v3}.  6   "DROP 
09f0: 56 49 45 57 20 49 46 20 45 58 49 53 54 53 20 76  VIEW IF EXISTS v
0a00: 32 22 20 20 20 20 20 20 20 20 7b 6d 61 69 6e 2e  2"        {main.
0a10: 76 31 20 74 65 6d 70 2e 76 31 20 61 75 78 2e 76  v1 temp.v1 aux.v
0a20: 31 20 61 75 78 2e 76 32 20 61 75 78 2e 76 33 7d  1 aux.v2 aux.v3}
0a30: 0a 20 20 37 20 20 20 22 44 52 4f 50 20 56 49 45  .  7   "DROP VIE
0a40: 57 20 49 46 20 45 58 49 53 54 53 20 6d 61 69 6e  W IF EXISTS main
0a50: 2e 76 31 22 20 20 20 7b 6d 61 69 6e 2e 76 32 20  .v1"   {main.v2 
0a60: 74 65 6d 70 2e 76 31 20 61 75 78 2e 76 31 20 61  temp.v1 aux.v1 a
0a70: 75 78 2e 76 32 20 61 75 78 2e 76 33 7d 0a 20 20  ux.v2 aux.v3}.  
0a80: 38 20 20 20 22 44 52 4f 50 20 56 49 45 57 20 49  8   "DROP VIEW I
0a90: 46 20 45 58 49 53 54 53 20 6d 61 69 6e 2e 76 32  F EXISTS main.v2
0aa0: 22 20 20 20 7b 6d 61 69 6e 2e 76 31 20 74 65 6d  "   {main.v1 tem
0ab0: 70 2e 76 31 20 61 75 78 2e 76 31 20 61 75 78 2e  p.v1 aux.v1 aux.
0ac0: 76 32 20 61 75 78 2e 76 33 7d 0a 7d 0a 0a 23 20  v2 aux.v3}.}..# 
0ad0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
0ae0: 37 30 30 32 2d 35 32 33 30 37 20 54 68 65 20 44  7002-52307 The D
0af0: 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
0b00: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
0b10: 77 0a 23 20 63 72 65 61 74 65 64 20 62 79 20 74  w.# created by t
0b20: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 73  he CREATE VIEW s
0b30: 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 64 72 6f 70  tatement..#.drop
0b40: 76 69 65 77 5f 72 65 6f 70 65 6e 5f 64 62 0a 64  view_reopen_db.d
0b50: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
0b60: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49  .1 {.  CREATE VI
0b70: 45 57 20 22 6e 65 77 20 76 69 65 77 22 20 41 53  EW "new view" AS
0b80: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0b90: 31 20 41 53 20 78 2c 20 74 31 20 41 53 20 79 3b  1 AS x, t1 AS y;
0ba0: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
0bb0: 20 22 6e 65 77 20 76 69 65 77 22 3b 0a 7d 20 7b   "new view";.} {
0bc0: 7b 61 20 6d 61 69 6e 7d 20 7b 62 20 6d 61 69 6e  {a main} {b main
0bd0: 7d 20 7b 61 20 6d 61 69 6e 7d 20 7b 62 20 6d 61  } {a main} {b ma
0be0: 69 6e 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  in}}.do_execsql_
0bf0: 74 65 73 74 20 32 2e 32 20 7b 3b 0a 20 20 53 45  test 2.2 {;.  SE
0c00: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
0c10: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
0c20: 6e 61 6d 65 20 3d 20 27 6e 65 77 20 76 69 65 77  name = 'new view
0c30: 27 3b 0a 7d 20 7b 0a 20 20 76 69 65 77 20 7b 6e  ';.} {.  view {n
0c40: 65 77 20 76 69 65 77 7d 20 7b 6e 65 77 20 76 69  ew view} {new vi
0c50: 65 77 7d 20 30 20 0a 20 20 7b 43 52 45 41 54 45  ew} 0 .  {CREATE
0c60: 20 56 49 45 57 20 22 6e 65 77 20 76 69 65 77 22   VIEW "new view"
0c70: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
0c80: 4d 20 74 31 20 41 53 20 78 2c 20 74 31 20 41 53  M t1 AS x, t1 AS
0c90: 20 79 7d 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c   y}.}.do_execsql
0ca0: 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20 44 52  _test 2.3 {.  DR
0cb0: 4f 50 20 56 49 45 57 20 22 6e 65 77 20 76 69 65  OP VIEW "new vie
0cc0: 77 22 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  w";.  SELECT * F
0cd0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0ce0: 72 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27  r WHERE name = '
0cf0: 6e 65 77 20 76 69 65 77 27 3b 0a 7d 20 7b 7d 0a  new view';.} {}.
0d00: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
0d10: 20 32 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20   2.4 {.  SELECT 
0d20: 2a 20 46 52 4f 4d 20 22 6e 65 77 20 76 69 65 77  * FROM "new view
0d30: 22 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  ".} {1 {no such 
0d40: 74 61 62 6c 65 3a 20 6e 65 77 20 76 69 65 77 7d  table: new view}
0d50: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
0d60: 3a 20 52 2d 30 30 33 35 39 2d 34 31 36 33 39 20  : R-00359-41639 
0d70: 54 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74  The view definit
0d80: 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66  ion is removed f
0d90: 72 6f 6d 20 74 68 65 0a 23 20 64 61 74 61 62 61  rom the.# databa
0da0: 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 6e  se schema, but n
0db0: 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e  o actual data in
0dc0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
0dd0: 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 0a 23  base tables is.#
0de0: 20 6d 6f 64 69 66 69 65 64 2e 0a 23 0a 23 20 20   modified..#.#  
0df0: 20 20 20 46 6f 72 20 65 61 63 68 20 76 69 65 77     For each view
0e00: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
0e10: 2c 20 63 68 65 63 6b 20 74 68 61 74 20 69 74 20  , check that it 
0e20: 63 61 6e 20 62 65 20 71 75 65 72 69 65 64 2e 20  can be queried. 
0e30: 54 68 65 6e 20 64 72 6f 70 0a 23 20 20 20 20 20  Then drop.#     
0e40: 69 74 2e 20 43 68 65 63 6b 20 74 68 61 74 20 69  it. Check that i
0e50: 74 20 63 61 6e 20 6e 6f 20 6c 6f 6e 67 65 72 20  t can no longer 
0e60: 62 65 20 71 75 65 72 69 65 64 20 61 6e 64 20 69  be queried and i
0e70: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 6c 69 73 74  s no longer list
0e80: 65 64 0a 23 20 20 20 20 20 69 6e 20 61 6e 79 20  ed.#     in any 
0e90: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 20 54 68  schema table. Th
0ea0: 65 6e 20 63 68 65 63 6b 20 74 68 61 74 20 74 68  en check that th
0eb0: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
0ec0: 65 20 64 62 20 74 61 62 6c 65 73 20 68 61 76 65  e db tables have
0ed0: 20 0a 23 20 20 20 20 20 6e 6f 74 20 63 68 61 6e   .#     not chan
0ee0: 67 65 64 0a 23 0a 73 65 74 20 64 61 74 61 62 61  ged.#.set databa
0ef0: 73 65 64 61 74 61 20 5b 6c 69 73 74 5f 61 6c 6c  sedata [list_all
0f00: 5f 64 61 74 61 5d 0a 0a 64 6f 5f 65 78 65 63 73  _data]..do_execs
0f10: 71 6c 5f 74 65 73 74 20 20 33 2e 31 2e 30 20 7b  ql_test  3.1.0 {
0f20: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0f30: 65 6d 70 2e 76 31 20 7d 20 7b 7b 61 20 74 65 6d  emp.v1 } {{a tem
0f40: 70 7d 20 7b 62 20 74 65 6d 70 7d 7d 0a 64 6f 5f  p} {b temp}}.do_
0f50: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 33 2e  execsql_test  3.
0f60: 31 2e 31 20 7b 20 44 52 4f 50 20 56 49 45 57 20  1.1 { DROP VIEW 
0f70: 74 65 6d 70 2e 76 31 20 7d 20 7b 7d 0a 64 6f 5f  temp.v1 } {}.do_
0f80: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 33 2e  catchsql_test 3.
0f90: 31 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  1.2 { SELECT * F
0fa0: 52 4f 4d 20 74 65 6d 70 2e 76 31 20 7d 20 7b 31  ROM temp.v1 } {1
0fb0: 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   {no such table:
0fc0: 20 74 65 6d 70 2e 76 31 7d 7d 0a 64 6f 5f 74 65   temp.v1}}.do_te
0fd0: 73 74 20 20 20 20 20 20 20 20 20 20 33 2e 31 2e  st          3.1.
0fe0: 33 20 7b 20 6c 69 73 74 5f 61 6c 6c 5f 76 69 65  3 { list_all_vie
0ff0: 77 73 20 7d 20 7b 6d 61 69 6e 2e 76 31 20 6d 61  ws } {main.v1 ma
1000: 69 6e 2e 76 32 20 61 75 78 2e 76 31 20 61 75 78  in.v2 aux.v1 aux
1010: 2e 76 32 20 61 75 78 2e 76 33 7d 0a 64 6f 5f 74  .v2 aux.v3}.do_t
1020: 65 73 74 20 20 20 20 20 20 20 20 20 20 33 2e 31  est          3.1
1030: 2e 34 20 7b 20 6c 69 73 74 5f 61 6c 6c 5f 64 61  .4 { list_all_da
1040: 74 61 20 20 7d 20 24 64 61 74 61 62 61 73 65 64  ta  } $databased
1050: 61 74 61 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  ata..do_execsql_
1060: 74 65 73 74 20 20 33 2e 32 2e 30 20 7b 20 53 45  test  3.2.0 { SE
1070: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20 7d  LECT * FROM v1 }
1080: 20 7b 7b 61 20 6d 61 69 6e 7d 20 7b 62 20 6d 61   {{a main} {b ma
1090: 69 6e 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  in}}.do_execsql_
10a0: 74 65 73 74 20 20 33 2e 32 2e 31 20 7b 20 44 52  test  3.2.1 { DR
10b0: 4f 50 20 56 49 45 57 20 76 31 20 7d 20 7b 7d 0a  OP VIEW v1 } {}.
10c0: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
10d0: 20 33 2e 32 2e 32 20 7b 20 53 45 4c 45 43 54 20   3.2.2 { SELECT 
10e0: 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 76 31 20 7d  * FROM main.v1 }
10f0: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
1100: 6c 65 3a 20 6d 61 69 6e 2e 76 31 7d 7d 0a 64 6f  le: main.v1}}.do
1110: 5f 74 65 73 74 20 20 20 20 20 20 20 20 20 20 33  _test          3
1120: 2e 32 2e 33 20 7b 20 6c 69 73 74 5f 61 6c 6c 5f  .2.3 { list_all_
1130: 76 69 65 77 73 20 7d 20 7b 6d 61 69 6e 2e 76 32  views } {main.v2
1140: 20 61 75 78 2e 76 31 20 61 75 78 2e 76 32 20 61   aux.v1 aux.v2 a
1150: 75 78 2e 76 33 7d 0a 64 6f 5f 74 65 73 74 20 20  ux.v3}.do_test  
1160: 20 20 20 20 20 20 20 20 33 2e 32 2e 34 20 7b 20          3.2.4 { 
1170: 6c 69 73 74 5f 61 6c 6c 5f 64 61 74 61 20 20 7d  list_all_data  }
1180: 20 24 64 61 74 61 62 61 73 65 64 61 74 61 0a 0a   $databasedata..
1190: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
11a0: 20 33 2e 33 2e 30 20 7b 20 53 45 4c 45 43 54 20   3.3.0 { SELECT 
11b0: 2a 20 46 52 4f 4d 20 76 32 20 7d 20 7b 7b 61 20  * FROM v2 } {{a 
11c0: 6d 61 69 6e 7d 20 7b 62 20 6d 61 69 6e 7d 7d 0a  main} {b main}}.
11d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
11e0: 20 33 2e 33 2e 31 20 7b 20 44 52 4f 50 20 56 49   3.3.1 { DROP VI
11f0: 45 57 20 76 32 20 7d 20 7b 7d 0a 64 6f 5f 63 61  EW v2 } {}.do_ca
1200: 74 63 68 73 71 6c 5f 74 65 73 74 20 33 2e 33 2e  tchsql_test 3.3.
1210: 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  2 { SELECT * FRO
1220: 4d 20 6d 61 69 6e 2e 76 32 20 7d 20 7b 31 20 7b  M main.v2 } {1 {
1230: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 6d  no such table: m
1240: 61 69 6e 2e 76 32 7d 7d 0a 64 6f 5f 74 65 73 74  ain.v2}}.do_test
1250: 20 20 20 20 20 20 20 20 20 20 33 2e 33 2e 33 20            3.3.3 
1260: 7b 20 6c 69 73 74 5f 61 6c 6c 5f 76 69 65 77 73  { list_all_views
1270: 20 7d 20 7b 61 75 78 2e 76 31 20 61 75 78 2e 76   } {aux.v1 aux.v
1280: 32 20 61 75 78 2e 76 33 7d 0a 64 6f 5f 74 65 73  2 aux.v3}.do_tes
1290: 74 20 20 20 20 20 20 20 20 20 20 33 2e 33 2e 34  t          3.3.4
12a0: 20 7b 20 6c 69 73 74 5f 61 6c 6c 5f 64 61 74 61   { list_all_data
12b0: 20 20 7d 20 24 64 61 74 61 62 61 73 65 64 61 74    } $databasedat
12c0: 61 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  a..do_execsql_te
12d0: 73 74 20 20 33 2e 34 2e 30 20 7b 20 53 45 4c 45  st  3.4.0 { SELE
12e0: 43 54 20 2a 20 46 52 4f 4d 20 76 31 20 7d 20 7b  CT * FROM v1 } {
12f0: 7b 61 20 61 75 78 7d 20 7b 62 20 61 75 78 7d 7d  {a aux} {b aux}}
1300: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1310: 20 20 33 2e 34 2e 31 20 7b 20 44 52 4f 50 20 56    3.4.1 { DROP V
1320: 49 45 57 20 76 31 20 7d 20 7b 7d 0a 64 6f 5f 63  IEW v1 } {}.do_c
1330: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 33 2e 34  atchsql_test 3.4
1340: 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  .2 { SELECT * FR
1350: 4f 4d 20 76 31 20 7d 20 7b 31 20 7b 6e 6f 20 73  OM v1 } {1 {no s
1360: 75 63 68 20 74 61 62 6c 65 3a 20 76 31 7d 7d 0a  uch table: v1}}.
1370: 64 6f 5f 74 65 73 74 20 20 20 20 20 20 20 20 20  do_test         
1380: 20 33 2e 34 2e 33 20 7b 20 6c 69 73 74 5f 61 6c   3.4.3 { list_al
1390: 6c 5f 76 69 65 77 73 20 7d 20 7b 61 75 78 2e 76  l_views } {aux.v
13a0: 32 20 61 75 78 2e 76 33 7d 0a 64 6f 5f 74 65 73  2 aux.v3}.do_tes
13b0: 74 20 20 20 20 20 20 20 20 20 20 33 2e 34 2e 34  t          3.4.4
13c0: 20 7b 20 6c 69 73 74 5f 61 6c 6c 5f 64 61 74 61   { list_all_data
13d0: 20 20 7d 20 24 64 61 74 61 62 61 73 65 64 61 74    } $databasedat
13e0: 61 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  a..do_execsql_te
13f0: 73 74 20 20 33 2e 34 2e 30 20 7b 20 53 45 4c 45  st  3.4.0 { SELE
1400: 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 76 32  CT * FROM aux.v2
1410: 20 7d 20 7b 7b 61 20 61 75 78 7d 20 7b 62 20 61   } {{a aux} {b a
1420: 75 78 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  ux}}.do_execsql_
1430: 74 65 73 74 20 20 33 2e 34 2e 31 20 7b 20 44 52  test  3.4.1 { DR
1440: 4f 50 20 56 49 45 57 20 61 75 78 2e 76 32 20 7d  OP VIEW aux.v2 }
1450: 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f   {}.do_catchsql_
1460: 74 65 73 74 20 33 2e 34 2e 32 20 7b 20 53 45 4c  test 3.4.2 { SEL
1470: 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 76  ECT * FROM aux.v
1480: 32 20 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  2 } {1 {no such 
1490: 74 61 62 6c 65 3a 20 61 75 78 2e 76 32 7d 7d 0a  table: aux.v2}}.
14a0: 64 6f 5f 74 65 73 74 20 20 20 20 20 20 20 20 20  do_test         
14b0: 20 33 2e 34 2e 33 20 7b 20 6c 69 73 74 5f 61 6c   3.4.3 { list_al
14c0: 6c 5f 76 69 65 77 73 20 7d 20 7b 61 75 78 2e 76  l_views } {aux.v
14d0: 33 7d 0a 64 6f 5f 74 65 73 74 20 20 20 20 20 20  3}.do_test      
14e0: 20 20 20 20 33 2e 34 2e 34 20 7b 20 6c 69 73 74      3.4.4 { list
14f0: 5f 61 6c 6c 5f 64 61 74 61 20 20 7d 20 24 64 61  _all_data  } $da
1500: 74 61 62 61 73 65 64 61 74 61 0a 0a 64 6f 5f 65  tabasedata..do_e
1510: 78 65 63 73 71 6c 5f 74 65 73 74 20 20 33 2e 35  xecsql_test  3.5
1520: 2e 30 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  .0 { SELECT * FR
1530: 4f 4d 20 76 33 20 7d 20 7b 7b 61 20 61 75 78 7d  OM v3 } {{a aux}
1540: 20 7b 62 20 61 75 78 7d 7d 0a 64 6f 5f 65 78 65   {b aux}}.do_exe
1550: 63 73 71 6c 5f 74 65 73 74 20 20 33 2e 35 2e 31  csql_test  3.5.1
1560: 20 7b 20 44 52 4f 50 20 56 49 45 57 20 76 33 20   { DROP VIEW v3 
1570: 7d 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c  } {}.do_catchsql
1580: 5f 74 65 73 74 20 33 2e 35 2e 32 20 7b 20 53 45  _test 3.5.2 { SE
1590: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 33 20 7d  LECT * FROM v3 }
15a0: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
15b0: 6c 65 3a 20 76 33 7d 7d 0a 64 6f 5f 74 65 73 74  le: v3}}.do_test
15c0: 20 20 20 20 20 20 20 20 20 20 33 2e 35 2e 33 20            3.5.3 
15d0: 7b 20 6c 69 73 74 5f 61 6c 6c 5f 76 69 65 77 73  { list_all_views
15e0: 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 20 20   } {}.do_test   
15f0: 20 20 20 20 20 20 20 33 2e 35 2e 34 20 7b 20 6c         3.5.4 { l
1600: 69 73 74 5f 61 6c 6c 5f 64 61 74 61 20 20 7d 20  ist_all_data  } 
1610: 24 64 61 74 61 62 61 73 65 64 61 74 61 0a 0a 23  $databasedata..#
1620: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
1630: 32 35 35 35 38 2d 33 37 34 38 37 20 49 66 20 74  25558-37487 If t
1640: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
1650: 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
1660: 64 20 61 6e 64 0a 23 20 74 68 65 20 49 46 20 45  d and.# the IF E
1670: 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
1680: 6e 6f 74 20 70 72 65 73 65 6e 74 2c 20 69 74 20  not present, it 
1690: 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 23 0a 64  is an error..#.d
16a0: 6f 5f 64 72 6f 70 76 69 65 77 5f 74 65 73 74 73  o_dropview_tests
16b0: 20 34 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 64   4 -repair {.  d
16c0: 72 6f 70 76 69 65 77 5f 72 65 6f 70 65 6e 5f 64  ropview_reopen_d
16d0: 62 20 0a 7d 20 2d 65 72 72 6f 72 66 6f 72 6d 61  b .} -errorforma
16e0: 74 20 7b 0a 20 20 6e 6f 20 73 75 63 68 20 76 69  t {.  no such vi
16f0: 65 77 3a 20 25 73 0a 7d 20 7b 0a 20 20 31 20 20  ew: %s.} {.  1  
1700: 20 22 44 52 4f 50 20 56 49 45 57 20 78 78 22 20   "DROP VIEW xx" 
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1720: 20 78 78 0a 20 20 32 20 20 20 22 44 52 4f 50 20   xx.  2   "DROP 
1730: 56 49 45 57 20 6d 61 69 6e 2e 78 78 22 20 20 20  VIEW main.xx"   
1740: 20 20 20 20 20 20 20 20 20 20 6d 61 69 6e 2e 78            main.x
1750: 78 0a 20 20 33 20 20 20 22 44 52 4f 50 20 56 49  x.  3   "DROP VI
1760: 45 57 20 74 65 6d 70 2e 76 32 22 20 20 20 20 20  EW temp.v2"     
1770: 20 20 20 20 20 20 20 20 74 65 6d 70 2e 76 32 0a          temp.v2.
1780: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
1790: 3a 20 52 2d 30 37 34 39 30 2d 33 32 35 33 36 20  : R-07490-32536 
17a0: 49 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  If the specified
17b0: 20 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20   view cannot be 
17c0: 66 6f 75 6e 64 20 61 6e 64 0a 23 20 61 6e 20 49  found and.# an I
17d0: 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  F EXISTS clause 
17e0: 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  is present in th
17f0: 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
1800: 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a  ement, then the.
1810: 23 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  # statement is a
1820: 20 6e 6f 2d 6f 70 2e 0a 23 0a 64 6f 5f 64 72 6f   no-op..#.do_dro
1830: 70 76 69 65 77 5f 74 65 73 74 73 20 35 20 2d 72  pview_tests 5 -r
1840: 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70 76 69  epair {.  dropvi
1850: 65 77 5f 72 65 6f 70 65 6e 5f 64 62 0a 7d 20 2d  ew_reopen_db.} -
1860: 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 6c 69 73  tclquery {.  lis
1870: 74 5f 61 6c 6c 5f 76 69 65 77 73 0a 20 20 65 78  t_all_views.  ex
1880: 70 72 20 7b 5b 6c 69 73 74 5f 61 6c 6c 5f 76 69  pr {[list_all_vi
1890: 65 77 73 5d 20 3d 3d 20 22 6d 61 69 6e 2e 76 31  ews] == "main.v1
18a0: 20 6d 61 69 6e 2e 76 32 20 74 65 6d 70 2e 76 31   main.v2 temp.v1
18b0: 20 61 75 78 2e 76 31 20 61 75 78 2e 76 32 20 61   aux.v1 aux.v2 a
18c0: 75 78 2e 76 33 22 7d 0a 7d 20 7b 0a 20 20 31 20  ux.v3"}.} {.  1 
18d0: 20 20 20 22 44 52 4f 50 20 56 49 45 57 20 49 46     "DROP VIEW IF
18e0: 20 45 58 49 53 54 53 20 78 78 22 20 20 20 20 20   EXISTS xx"     
18f0: 20 20 31 0a 20 20 32 20 20 20 20 22 44 52 4f 50    1.  2    "DROP
1900: 20 56 49 45 57 20 49 46 20 45 58 49 53 54 53 20   VIEW IF EXISTS 
1910: 6d 61 69 6e 2e 78 78 22 20 20 31 0a 20 20 33 20  main.xx"  1.  3 
1920: 20 20 20 22 44 52 4f 50 20 56 49 45 57 20 49 46     "DROP VIEW IF
1930: 20 45 58 49 53 54 53 20 74 65 6d 70 2e 76 32 22   EXISTS temp.v2"
1940: 20 20 31 0a 7d 0a 0a 0a 0a 0a 66 69 6e 69 73 68    1.}.....finish
1950: 5f 74 65 73 74 0a                                _test.