Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | Refactoring many of the bubble syntax diagrams, especially related to SELECT. Attempting to make the bubble diagrams easier to follow. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9aa1b8df9b79a752ebf4387ec0b10a36 |
User & Date: | drh 2014-01-23 18:37:48.335 |
2014-01-23
| ||
22:25 | Incremental checkin of work on the common-table-expression documentation. (check-in: 52484ca596 user: drh tags: trunk) | |
18:37 | Refactoring many of the bubble syntax diagrams, especially related to SELECT. Attempting to make the bubble diagrams easier to follow. (check-in: 9aa1b8df9b user: drh tags: trunk) | |
15:29 | Fix a link in the with-clause syntax diagram. (check-in: 3598251c1c user: drh tags: trunk) | |
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
︙ | ︙ | |||
201 202 203 204 205 206 207 | create-virtual-table-stmt { stack {line CREATE VIRTUAL TABLE {opt IF NOT EXISTS}} {line {optx /database-name .} /table-name} {line USING /module-name {optx ( {loop /module-argument ,} )}} } with-clause { | < > | > > | > > > > > > | | 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | create-virtual-table-stmt { stack {line CREATE VIRTUAL TABLE {opt IF NOT EXISTS}} {line {optx /database-name .} /table-name} {line USING /module-name {optx ( {loop /module-argument ,} )}} } with-clause { line WITH {opt RECURSIVE} {loop {line cte-table-name AS ( select-stmt )} ,} } cte-table-name { line /table-name {optx ( {loop /column-name ,} )} } recursive-cte { line cte-table-name AS ( /initial-select {or UNION {line UNION ALL}} /recursive-select ) } common-table-expression { line /table-name {optx ( {loop /column-name ,} )} AS ( select-stmt ) } delete-stmt { stack {line {opt with-clause} DELETE FROM qualified-table-name} {optx WHERE expr} } delete-stmt-limited { |
︙ | ︙ | |||
333 334 335 336 337 338 339 | /collation-name {line {optx /database-name .} {tailbranch /table-name /index-name} } } } select-stmt { | < < | | < < < | > | > | > > | | > > | > > | > > < > > > > > | > > > > | | < < < | | < > | | > | | > > > > > > > | > > > > > > > | | | 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 | /collation-name {line {optx /database-name .} {tailbranch /table-name /index-name} } } } select-stmt { loop {or {stack {opt {line WITH {opt RECURSIVE} {loop common-table-expression ,}}} {line SELECT {or nil DISTINCT ALL} {loop result-column ,}} {optx FROM {loop table-or-subquery {join-operator table-or-subquery join-constraint}}} {optx WHERE expr} {optx GROUP BY {loop expr ,} {optx HAVING expr}} {optx ORDER BY {loop ordering-term ,}} {optx LIMIT expr {optx {or OFFSET ,} expr}} } {line VALUES {loop {line ( {loop expr ,} )} ,}} } compound-operator } simple-select-stmt { or {stack {opt {line WITH {opt RECURSIVE} {loop common-table-expression ,}}} {line SELECT {or nil DISTINCT ALL} {loop result-column ,}} {optx FROM {loop table-or-subquery {join-operator table-or-subquery join-constraint}}} {optx WHERE expr} {optx GROUP BY {loop expr ,} {optx HAVING expr}} {optx ORDER BY {loop ordering-term ,}} {optx LIMIT expr {optx {or OFFSET ,} expr}} } {line VALUES {loop {line ( {loop expr ,} )} ,}} } compound-select-stmt { stack {opt {line WITH {opt RECURSIVE} {loop common-table-expression ,}}} {line simple-select-stmt {loop {line {or UNION {line UNION ALL} INTERSECT EXCEPT} simple-select-stmt} nil}} } table-or-subquery { or {stack {line {optx /database-name .} /table-name {optx {optx AS} /table-alias} } {or nil {line INDEXED BY /index-name} {line NOT INDEXED}} } {line ( {loop table-or-subquery {join-op table-or-subquery join-constraint}} )} {line ( select-stmt ) {optx {optx AS} /table-alias} } } result-column { or * {line /table-name . *} {line expr {optx {optx AS} /column-alias}} } join-operator { or {line ,} {line {opt NATURAL} {or nil {line LEFT {or OUTER nil}} INNER CROSS} JOIN } } join-constraint { or {line ON expr} {line USING ( {loop /column-name ,} )} nil } ordering-term { line expr {opt COLLATE /collation-name} {or nil ASC DESC} } compound-operator { or UNION {line UNION ALL} INTERSECT EXCEPT } update-stmt { stack {line {opt with-clause} UPDATE {or {} {line OR ROLLBACK} {line OR ABORT} {line OR REPLACE} {line OR FAIL} |
︙ | ︙ |
︙ | ︙ | |||
67 68 69 70 71 72 73 | set x0 [expr {$x-$r}] set x1 [expr {$x+$r}] .c create arc $x0 $y0 $x1 $y1 \ -width 2 -start 90 -extent -180 -tags $tag -style arc } } | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | set x0 [expr {$x-$r}] set x1 [expr {$x+$r}] .c create arc $x0 $y0 $x1 $y1 \ -width 2 -start 90 -extent -180 -tags $tag -style arc } } # Draw a left-hand turn around. Approximately a "(" # proc draw_left_turnback {tag x y0 y1 dir} { global RADIUS if {$y0 + 2*$RADIUS < $y1} { set xr0 [expr {$x-$RADIUS}] set xr1 [expr {$x+$RADIUS}] .c create arc $xr0 $y0 $xr1 [expr {$y0+2*$RADIUS}] \ |
︙ | ︙ | |||
132 133 134 135 136 137 138 | } set id1 [.c create text 0 0 -anchor c -text $txt -font $font -tags $tag] foreach {x0 y0 x1 y1} [.c bbox $id1] break set h [expr {$y1-$y0+2}] set rad [expr {($h+1)/2}] set top [expr {$y0-2}] set btm [expr {$y1}] | > > | | > > | | | | | | | 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | } set id1 [.c create text 0 0 -anchor c -text $txt -font $font -tags $tag] foreach {x0 y0 x1 y1} [.c bbox $id1] break set h [expr {$y1-$y0+2}] set rad [expr {($h+1)/2}] set top [expr {$y0-2}] set btm [expr {$y1}] set fudge [expr {int(3*$istoken + [string length $txt]*1.4)}] #puts "fudge($txt)=$fudge" set left [expr {$x0+$fudge}] set right [expr {$x1-$fudge}] if {$left>$right} { set left [expr {($x0+$x1)/2}] set right $left } set tag2 x$tagcnt-box set tags [list $tag $tag2] if {$istoken} { .c create arc [expr {$left-$rad}] $top [expr {$left+$rad}] $btm \ -width 2 -start 90 -extent 180 -style arc -tags $tags .c create arc [expr {$right-$rad}] $top [expr {$right+$rad}] $btm \ -width 2 -start -90 -extent 180 -style arc -tags $tags if {$left<$right} { .c create line $left $top $right $top -width 2 -tags $tags .c create line $left $btm $right $btm -width 2 -tags $tags } } else { .c create rect $left $top $right $btm -width 2 -tags $tags } foreach {x0 y0 x1 y1} [.c bbox $tag2] break set width [expr {$x1-$x0}] .c move $tag [expr {-$x0}] 0 # Entry is always 0 0 # Return: TAG EXIT_X EXIT_Y # return [list $tag $width 0] |
︙ | ︙ | |||
614 615 616 617 618 619 620 621 622 623 624 625 626 627 | set args [lrange $spec 1 end] if {[llength $args]==1} { return [draw_or [list [lindex $args 0] nil]] } else { return [draw_or [list "line $args" nil]] } } if {$cmd=="tailbranch"} { # return [draw_tail_branch [lrange $spec 1 end]] return [draw_or [lrange $spec 1 end]] } error "unknown operator: $cmd" } | > > > > | 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 | set args [lrange $spec 1 end] if {[llength $args]==1} { return [draw_or [list [lindex $args 0] nil]] } else { return [draw_or [list "line $args" nil]] } } if {$cmd=="optloop"} { set args [lrange $spec 1 end] return [draw_or [list nil [concat loop $args]]] } if {$cmd=="tailbranch"} { # return [draw_tail_branch [lrange $spec 1 end]] return [draw_or [lrange $spec 1 end]] } error "unknown operator: $cmd" } |
︙ | ︙ |
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | set syntax_linkage(alter-table-stmt) {column-def sql-stmt} set syntax_linkage(analyze-stmt) {{} sql-stmt} set syntax_linkage(attach-stmt) {expr sql-stmt} set syntax_linkage(begin-stmt) {{} sql-stmt} set syntax_linkage(column-constraint) {{conflict-clause expr foreign-key-clause literal-value signed-number} column-def} set syntax_linkage(column-def) {{column-constraint type-name} {alter-table-stmt create-table-stmt}} set syntax_linkage(comment-syntax) {{} {}} set syntax_linkage(commit-stmt) {{} sql-stmt} set syntax_linkage(compound-operator) {{} select-stmt} set syntax_linkage(conflict-clause) {{} {column-constraint table-constraint}} set syntax_linkage(create-index-stmt) {{expr indexed-column} sql-stmt} set syntax_linkage(create-table-stmt) {{column-def select-stmt table-constraint} sql-stmt} set syntax_linkage(create-trigger-stmt) {{delete-stmt expr insert-stmt select-stmt update-stmt} sql-stmt} set syntax_linkage(create-view-stmt) {select-stmt sql-stmt} set syntax_linkage(create-virtual-table-stmt) {{} sql-stmt} set syntax_linkage(delete-stmt) {{expr qualified-table-name with-clause} {create-trigger-stmt sql-stmt}} set syntax_linkage(delete-stmt-limited) {{expr ordering-term qualified-table-name with-clause} sql-stmt} set syntax_linkage(detach-stmt) {{} sql-stmt} set syntax_linkage(drop-index-stmt) {{} sql-stmt} set syntax_linkage(drop-table-stmt) {{} sql-stmt} set syntax_linkage(drop-trigger-stmt) {{} sql-stmt} set syntax_linkage(drop-view-stmt) {{} sql-stmt} | > > > | | | < | > | | | < > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | set syntax_linkage(alter-table-stmt) {column-def sql-stmt} set syntax_linkage(analyze-stmt) {{} sql-stmt} set syntax_linkage(attach-stmt) {expr sql-stmt} set syntax_linkage(begin-stmt) {{} sql-stmt} set syntax_linkage(column-constraint) {{conflict-clause expr foreign-key-clause literal-value signed-number} column-def} set syntax_linkage(column-def) {{column-constraint type-name} {alter-table-stmt create-table-stmt}} set syntax_linkage(comment-syntax) {{} {}} set syntax_linkage(commit-stmt) {{} sql-stmt} set syntax_linkage(common-table-expression) {select-stmt {compound-select-stmt select-stmt simple-select-stmt}} set syntax_linkage(compound-operator) {{} select-stmt} set syntax_linkage(compound-select-stmt) {{common-table-expression simple-select-stmt} {}} set syntax_linkage(conflict-clause) {{} {column-constraint table-constraint}} set syntax_linkage(create-index-stmt) {{expr indexed-column} sql-stmt} set syntax_linkage(create-table-stmt) {{column-def select-stmt table-constraint} sql-stmt} set syntax_linkage(create-trigger-stmt) {{delete-stmt expr insert-stmt select-stmt update-stmt} sql-stmt} set syntax_linkage(create-view-stmt) {select-stmt sql-stmt} set syntax_linkage(create-virtual-table-stmt) {{} sql-stmt} set syntax_linkage(cte-table-name) {{} {recursive-cte with-clause}} set syntax_linkage(delete-stmt) {{expr qualified-table-name with-clause} {create-trigger-stmt sql-stmt}} set syntax_linkage(delete-stmt-limited) {{expr ordering-term qualified-table-name with-clause} sql-stmt} set syntax_linkage(detach-stmt) {{} sql-stmt} set syntax_linkage(drop-index-stmt) {{} sql-stmt} set syntax_linkage(drop-table-stmt) {{} sql-stmt} set syntax_linkage(drop-trigger-stmt) {{} sql-stmt} set syntax_linkage(drop-view-stmt) {{} sql-stmt} set syntax_linkage(expr) {{literal-value raise-function select-stmt type-name} {attach-stmt column-constraint create-index-stmt create-trigger-stmt delete-stmt delete-stmt-limited insert-stmt join-constraint ordering-term result-column select-stmt simple-select-stmt table-constraint update-stmt update-stmt-limited}} set syntax_linkage(foreign-key-clause) {{} {column-constraint table-constraint}} set syntax_linkage(indexed-column) {{} {create-index-stmt table-constraint}} set syntax_linkage(insert-stmt) {{expr select-stmt with-clause} {create-trigger-stmt sql-stmt}} set syntax_linkage(join-constraint) {expr {select-stmt simple-select-stmt table-or-subquery}} set syntax_linkage(join-operator) {{} {select-stmt simple-select-stmt}} set syntax_linkage(literal-value) {{} {column-constraint expr}} set syntax_linkage(numeric-literal) {{} {}} set syntax_linkage(ordering-term) {expr {delete-stmt-limited select-stmt simple-select-stmt update-stmt-limited}} set syntax_linkage(pragma-stmt) {pragma-value sql-stmt} set syntax_linkage(pragma-value) {signed-number pragma-stmt} set syntax_linkage(qualified-table-name) {{} {delete-stmt delete-stmt-limited update-stmt update-stmt-limited}} set syntax_linkage(raise-function) {{} expr} set syntax_linkage(recursive-cte) {cte-table-name {}} set syntax_linkage(reindex-stmt) {{} sql-stmt} set syntax_linkage(release-stmt) {{} sql-stmt} set syntax_linkage(result-column) {expr {select-stmt simple-select-stmt}} set syntax_linkage(rollback-stmt) {{} sql-stmt} set syntax_linkage(savepoint-stmt) {{} sql-stmt} set syntax_linkage(select-stmt) {{common-table-expression compound-operator expr join-constraint join-operator ordering-term result-column table-or-subquery} {common-table-expression create-table-stmt create-trigger-stmt create-view-stmt expr insert-stmt sql-stmt table-or-subquery with-clause}} set syntax_linkage(signed-number) {{} {column-constraint pragma-value type-name}} set syntax_linkage(simple-select-stmt) {{common-table-expression expr join-constraint join-operator ordering-term result-column table-or-subquery} compound-select-stmt} set syntax_linkage(sql-stmt) {{alter-table-stmt analyze-stmt attach-stmt begin-stmt commit-stmt create-index-stmt create-table-stmt create-trigger-stmt create-view-stmt create-virtual-table-stmt delete-stmt delete-stmt-limited detach-stmt drop-index-stmt drop-table-stmt drop-trigger-stmt drop-view-stmt insert-stmt pragma-stmt reindex-stmt release-stmt rollback-stmt savepoint-stmt select-stmt update-stmt update-stmt-limited vacuum-stmt} sql-stmt-list} set syntax_linkage(sql-stmt-list) {sql-stmt {}} set syntax_linkage(table-constraint) {{conflict-clause expr foreign-key-clause indexed-column} create-table-stmt} set syntax_linkage(table-or-subquery) {{join-constraint select-stmt} {select-stmt simple-select-stmt}} set syntax_linkage(type-name) {signed-number {column-def expr}} set syntax_linkage(update-stmt) {{expr qualified-table-name with-clause} {create-trigger-stmt sql-stmt}} set syntax_linkage(update-stmt-limited) {{expr ordering-term qualified-table-name with-clause} sql-stmt} set syntax_linkage(vacuum-stmt) {{} sql-stmt} set syntax_linkage(with-clause) {{cte-table-name select-stmt} {delete-stmt delete-stmt-limited insert-stmt update-stmt update-stmt-limited}} set syntax_order {sql-stmt-list sql-stmt alter-table-stmt analyze-stmt attach-stmt begin-stmt commit-stmt rollback-stmt savepoint-stmt release-stmt create-index-stmt indexed-column create-table-stmt column-def type-name column-constraint signed-number table-constraint foreign-key-clause conflict-clause create-trigger-stmt create-view-stmt create-virtual-table-stmt with-clause cte-table-name recursive-cte common-table-expression delete-stmt delete-stmt-limited detach-stmt drop-index-stmt drop-table-stmt drop-trigger-stmt drop-view-stmt expr raise-function literal-value numeric-literal insert-stmt pragma-stmt pragma-value reindex-stmt select-stmt simple-select-stmt compound-select-stmt table-or-subquery result-column join-operator join-constraint ordering-term compound-operator update-stmt update-stmt-limited qualified-table-name vacuum-stmt comment-syntax} |
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
cannot compute difference between binary files
︙ | ︙ | |||
3027 3028 3029 3030 3031 3032 3033 | This alias is provided for compatibility other SQL database engines. See the [INSERT] command documentation for additional information.</p> <tcl> ############################################################################### Section SELECT select {SELECT query} | | | 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 | This alias is provided for compatibility other SQL database engines. See the [INSERT] command documentation for additional information.</p> <tcl> ############################################################################### Section SELECT select {SELECT query} RecursiveBubbleDiagram select-stmt </tcl> <p>The SELECT statement is used to query the database. The result of a SELECT is zero or more rows of data where each row has a fixed number of columns. |
︙ | ︙ |