SQLite
Hex Artifact Content
Not logged in

Ticket change [a12c51a20c] - New ticket [d6b36be38a] Sub-select in LIMIT clause may access db without locks.. by dan 2012-12-07 18:57:01.
0000: 44 20 32 30 31 32 2d 31 32 2d 30 37 54 31 38 3a  D 2012-12-07T18:
0010: 35 37 3a 30 31 2e 34 32 31 0a 4a 20 63 6f 6d 6d  57:01.421.J comm
0020: 65 6e 74 20 57 68 65 6e 5c 73 53 51 4c 69 74 65  ent When\sSQLite
0030: 5c 73 70 72 6f 63 65 73 73 65 73 5c 73 61 5c 73  \sprocesses\sa\s
0040: 53 45 4c 45 43 54 5c 73 73 74 61 74 65 6d 65 6e  SELECT\sstatemen
0050: 74 5c 73 66 6f 72 5c 73 77 68 69 63 68 5c 73 74  t\sfor\swhich\st
0060: 68 65 5c 73 46 52 4f 4d 5c 73 63 6c 61 75 73 65  he\sFROM\sclause
0070: 5c 73 63 6f 6e 74 61 69 6e 73 5c 73 61 5c 72 5c  \scontains\sa\r\
0080: 6e 73 69 6e 67 6c 65 5c 73 73 75 62 2d 73 65 6c  nsingle\ssub-sel
0090: 65 63 74 5c 73 74 68 61 74 5c 73 69 73 5c 73 6e  ect\sthat\sis\sn
00a0: 6f 74 5c 73 65 6c 69 67 69 62 6c 65 5c 73 66 6f  ot\seligible\sfo
00b0: 72 5c 73 74 68 65 5c 73 66 6c 61 74 74 65 6e 69  r\sthe\sflatteni
00c0: 6e 67 5c 73 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ng\soptimization
00d0: 2c 5c 73 69 74 5c 72 5c 6e 63 72 65 61 74 65 73  ,\sit\r\ncreates
00e0: 5c 73 61 5c 73 63 6f 2d 72 6f 75 74 69 6e 65 5c  \sa\sco-routine\
00f0: 73 74 68 61 74 5c 73 72 65 74 75 72 6e 73 5c 73  sthat\sreturns\s
0100: 6f 6e 65 5c 73 72 6f 77 5c 73 65 61 63 68 5c 73  one\srow\seach\s
0110: 74 69 6d 65 5c 73 69 74 5c 73 69 73 5c 73 69 6e  time\sit\sis\sin
0120: 76 6f 6b 65 64 5c 73 74 6f 5c 72 5c 6e 69 6d 70  voked\sto\r\nimp
0130: 6c 65 6d 65 6e 74 5c 73 74 68 65 5c 73 73 75 62  lement\sthe\ssub
0140: 2d 73 65 6c 65 63 74 2e 5c 72 5c 6e 5c 72 5c 6e  -select.\r\n\r\n
0150: 54 68 65 5c 73 76 64 62 65 5c 73 63 6f 64 65 5c  The\svdbe\scode\
0160: 73 69 73 3a 5c 72 5c 6e 5c 72 5c 6e 5c 73 5c 73  sis:\r\n\r\n\s\s
0170: 5c 73 2a 5c 73 4a 75 6d 70 5c 73 74 6f 5c 73 73  \s*\sJump\sto\ss
0180: 74 61 72 74 5c 73 6f 66 5c 73 6d 61 69 6e 5c 73  tart\sof\smain\s
0190: 72 6f 75 74 69 6e 65 2c 5c 72 5c 6e 5c 73 5c 73  routine,\r\n\s\s
01a0: 5c 73 2a 5c 73 42 6f 64 79 5c 73 6f 66 5c 73 63  \s*\sBody\sof\sc
01b0: 6f 2d 72 6f 75 74 69 6e 65 2c 5c 72 5c 6e 5c 73  o-routine,\r\n\s
01c0: 5c 73 5c 73 2a 5c 73 4d 61 69 6e 5c 73 72 6f 75  \s\s*\sMain\srou
01d0: 74 69 6e 65 5c 73 28 69 6e 76 6f 6b 65 73 5c 73  tine\s(invokes\s
01e0: 73 75 62 2d 72 6f 75 74 69 6e 65 29 2e 5c 72 5c  sub-routine).\r\
01f0: 6e 5c 73 5c 73 5c 73 2a 5c 73 56 65 72 69 66 79  n\s\s\s*\sVerify
0200: 43 6f 6f 6b 69 65 5c 73 72 6f 75 74 69 6e 65 2e  Cookie\sroutine.
0210: 5c 72 5c 6e 5c 72 5c 6e 42 65 63 61 75 73 65 5c  \r\n\r\nBecause\
0220: 73 6f 66 5c 73 74 68 65 5c 73 77 61 79 5c 73 74  sof\sthe\sway\st
0230: 68 65 5c 73 53 51 4c 5c 73 63 6f 6d 70 69 6c 65  he\sSQL\scompile
0240: 72 5c 73 77 6f 72 6b 73 2c 5c 73 74 68 65 5c 73  r\sworks,\sthe\s
0250: 56 65 72 69 66 79 43 6f 6f 6b 69 65 5c 73 72 6f  VerifyCookie\sro
0260: 75 74 69 6e 65 5c 73 69 73 5c 72 5c 6e 63 75 72  utine\sis\r\ncur
0270: 72 65 6e 74 6c 79 5c 73 62 65 69 6e 67 5c 73 69  rently\sbeing\si
0280: 6e 76 6f 6b 65 64 5c 73 74 68 65 5c 73 66 69 72  nvoked\sthe\sfir
0290: 73 74 5c 73 74 69 6d 65 5c 73 74 68 65 5c 73 63  st\stime\sthe\sc
02a0: 6f 2d 72 6f 75 74 69 6e 65 5c 73 69 73 5c 73 69  o-routine\sis\si
02b0: 6e 76 6f 6b 65 64 2c 5c 73 6e 6f 74 5c 73 62 79  nvoked,\snot\sby
02c0: 5c 73 74 68 65 5c 72 5c 6e 73 74 61 72 74 5c 73  \sthe\r\nstart\s
02d0: 6f 66 5c 73 74 68 65 5c 73 6d 61 69 6e 5c 73 72  of\sthe\smain\sr
02e0: 6f 75 74 69 6e 65 2e 5c 73 49 66 5c 73 74 68 65  outine.\sIf\sthe
02f0: 5c 73 6d 61 69 6e 5c 73 72 6f 75 74 69 6e 65 5c  \smain\sroutine\
0300: 73 61 74 74 65 6d 70 74 73 5c 73 74 6f 5c 73 61  sattempts\sto\sa
0310: 63 63 65 73 73 5c 73 74 68 65 5c 73 64 61 74 61  ccess\sthe\sdata
0320: 62 61 73 65 5c 72 5c 6e 62 65 66 6f 72 65 5c 73  base\r\nbefore\s
0330: 74 68 65 5c 73 63 6f 2d 72 6f 75 74 69 6e 65 5c  the\sco-routine\
0340: 73 69 73 5c 73 69 6e 76 6f 6b 65 64 2c 5c 73 74  sis\sinvoked,\st
0350: 68 65 6e 5c 73 69 74 5c 73 69 73 5c 73 61 6e 5c  hen\sit\sis\san\
0360: 73 65 72 72 6f 72 2e 5c 73 54 68 69 73 5c 73 6d  serror.\sThis\sm
0370: 61 79 5c 73 6f 63 63 75 72 5c 73 69 66 5c 73 65  ay\soccur\sif\se
0380: 69 74 68 65 72 5c 72 5c 6e 74 68 65 5c 73 4c 49  ither\r\nthe\sLI
0390: 4d 49 54 5c 73 6f 72 5c 73 74 68 65 5c 73 4f 46  MIT\sor\sthe\sOF
03a0: 46 53 45 54 5c 73 65 78 70 72 65 73 73 69 6f 6e  FSET\sexpression
03b0: 5c 73 6f 66 5c 73 74 68 65 5c 73 6d 61 69 6e 5c  \sof\sthe\smain\
03c0: 73 53 45 4c 45 43 54 5c 73 61 72 65 5c 73 74 68  sSELECT\sare\sth
03d0: 65 6d 73 65 6c 76 65 73 5c 72 5c 6e 73 75 62 2d  emselves\r\nsub-
03e0: 73 65 6c 65 63 74 73 5c 73 74 68 61 74 5c 73 61  selects\sthat\sa
03f0: 63 63 65 73 73 5c 73 74 68 65 5c 73 64 61 74 61  ccess\sthe\sdata
0400: 62 61 73 65 2e 5c 73 46 6f 72 5c 73 65 78 61 6d  base.\sFor\sexam
0410: 70 6c 65 3a 5c 72 5c 6e 5c 72 5c 6e 3c 76 65 72  ple:\r\n\r\n<ver
0420: 62 61 74 69 6d 3e 5c 72 5c 6e 5c 73 5c 73 43 52  batim>\r\n\s\sCR
0430: 45 41 54 45 5c 73 54 41 42 4c 45 5c 73 61 62 63  EATE\sTABLE\sabc
0440: 28 61 2c 5c 73 62 2c 5c 73 63 29 3b 5c 72 5c 6e  (a,\sb,\sc);\r\n
0450: 5c 73 5c 73 43 52 45 41 54 45 5c 73 54 41 42 4c  \s\sCREATE\sTABL
0460: 45 5c 73 64 65 66 28 61 2c 5c 73 62 2c 5c 73 63  E\sdef(a,\sb,\sc
0470: 29 3b 5c 72 5c 6e 5c 72 5c 6e 5c 73 5c 73 53 45  );\r\n\r\n\s\sSE
0480: 4c 45 43 54 5c 73 2a 5c 73 46 52 4f 4d 5c 73 28  LECT\s*\sFROM\s(
0490: 53 45 4c 45 43 54 5c 73 2a 5c 73 46 52 4f 4d 5c  SELECT\s*\sFROM\
04a0: 73 64 65 66 5c 73 4c 49 4d 49 54 5c 73 31 5c 73  sdef\sLIMIT\s1\s
04b0: 4f 46 46 53 45 54 5c 73 31 29 5c 73 4c 49 4d 49  OFFSET\s1)\sLIMI
04c0: 54 5c 73 28 53 45 4c 45 43 54 5c 73 32 30 5c 73  T\s(SELECT\s20\s
04d0: 46 52 4f 4d 5c 73 61 62 63 29 5c 72 5c 6e 3c 2f  FROM\sabc)\r\n</
04e0: 76 65 72 62 61 74 69 6d 3e 0a 4a 20 64 65 74 65  verbatim>.J dete
04f0: 63 74 65 64 20 53 74 72 65 73 73 5f 54 65 73 74  cted Stress_Test
0500: 69 6e 67 0a 4a 20 66 6f 75 6e 64 69 6e 20 74 72  ing.J foundin tr
0510: 75 6e 6b 0a 4a 20 73 65 76 65 72 69 74 79 20 43  unk.J severity C
0520: 72 69 74 69 63 61 6c 0a 4a 20 73 74 61 74 75 73  ritical.J status
0530: 20 4f 70 65 6e 0a 4a 20 73 75 62 73 79 73 74 65   Open.J subsyste
0540: 6d 20 43 6f 64 65 5f 47 65 6e 65 72 61 74 6f 72  m Code_Generator
0550: 0a 4a 20 74 69 74 6c 65 20 53 75 62 2d 73 65 6c  .J title Sub-sel
0560: 65 63 74 5c 73 69 6e 5c 73 4c 49 4d 49 54 5c 73  ect\sin\sLIMIT\s
0570: 63 6c 61 75 73 65 5c 73 6d 61 79 5c 73 61 63 63  clause\smay\sacc
0580: 65 73 73 5c 73 64 62 5c 73 77 69 74 68 6f 75 74  ess\sdb\swithout
0590: 5c 73 6c 6f 63 6b 73 2e 0a 4a 20 74 79 70 65 20  \slocks..J type
05a0: 43 6f 64 65 5f 44 65 66 65 63 74 0a 4b 20 64 36  Code_Defect.K d6
05b0: 62 33 36 62 65 33 38 61 30 36 63 30 35 32 35 37  b36be38a06c05257
05c0: 33 31 65 36 33 35 37 31 32 35 65 36 61 33 35 65  31e6357125e6a35e
05d0: 63 63 34 62 37 39 0a 55 20 64 61 6e 0a 5a 20 39  cc4b79.U dan.Z 9
05e0: 61 36 65 39 36 37 31 61 36 66 33 34 31 63 31 61  a6e9671a6f341c1a
05f0: 30 66 36 34 34 35 31 32 39 66 37 31 63 38 31 0a  0f6445129f71c81.