Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the "factored-select-stmt" syntax diagram. Improve the way diagrams are hidden and shown. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
fac98d12aeae1a2b80337c9034c07bbb |
User & Date: | drh 2014-01-30 20:51:24.566 |
Context
2014-01-30
| ||
20:55 | Fix an error in the table-or-subquery syntax diagram. (check-in: a467d7a4b8 user: drh tags: trunk) | |
20:51 | Add the "factored-select-stmt" syntax diagram. Improve the way diagrams are hidden and shown. (check-in: fac98d12ae user: drh tags: trunk) | |
19:39 | Make the "select-stmt" syntax diagram a closer fit to reality. (check-in: 0c43e7efb4 user: drh tags: trunk) | |
Changes
Changes to art/syntax/bubble-generator-data.tcl.
︙ | ︙ | |||
364 365 366 367 368 369 370 | {optx LIMIT expr {optx {or OFFSET ,} expr}} } join-clause { line table-or-subquery {opt {loop {line join-operator table-or-subquery join-constraint}}} } | | | | > > > > > > > | | | 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 | {optx LIMIT expr {optx {or OFFSET ,} expr}} } join-clause { line table-or-subquery {opt {loop {line join-operator table-or-subquery join-constraint}}} } select-core { or {stack {line SELECT {or nil DISTINCT ALL} {loop result-column ,}} {optx FROM {or {loop table-or-subquery ,} join-clause}} {optx WHERE expr} {optx GROUP BY {loop expr ,} {optx HAVING expr}} } {line VALUES {loop {line ( {loop expr ,} )} ,}} } factored-select-stmt { stack {opt {line WITH {opt RECURSIVE} {loop common-table-expression ,}}} {line {loop select-core compound-operator}} {optx ORDER BY {loop ordering-term ,}} {optx LIMIT expr {optx {or OFFSET ,} expr}} } simple-select-stmt { stack {opt {line WITH {opt RECURSIVE} {loop common-table-expression ,}}} {line select-core {stack {optx ORDER BY {loop ordering-term ,}} {optx LIMIT expr {optx {or OFFSET ,} expr}}}} } compound-select-stmt { stack {opt {line WITH {opt RECURSIVE} {loop common-table-expression ,}}} {line select-core {loop {line {or UNION {line UNION ALL} INTERSECT EXCEPT} select-core} nil}} {optx ORDER BY {loop ordering-term ,}} {optx LIMIT expr {optx {or OFFSET ,} expr}} } table-or-subquery { or {stack {line |
︙ | ︙ |
Changes to art/syntax/compound-select-stmt.gif.
cannot compute difference between binary files
Deleted art/syntax/extended-simple-select-stmt.gif.
cannot compute difference between binary files
Added art/syntax/factored-select-stmt.gif.
cannot compute difference between binary files
Added art/syntax/select-core.gif.
cannot compute difference between binary files
Changes to art/syntax/simple-select-stmt.gif.
cannot compute difference between binary files
Changes to art/syntax/syntax_linkage.tcl.
1 2 3 4 5 6 7 8 | 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} | | | | | | | | | > | | | | 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 58 59 60 | 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 factored-select-stmt select-stmt simple-select-stmt}} set syntax_linkage(compound-operator) {{} {factored-select-stmt select-stmt}} set syntax_linkage(compound-select-stmt) {{common-table-expression expr ordering-term select-core} {}} 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 compound-select-stmt create-index-stmt create-trigger-stmt delete-stmt delete-stmt-limited factored-select-stmt insert-stmt join-constraint ordering-term result-column select-core select-stmt simple-select-stmt table-constraint update-stmt update-stmt-limited}} set syntax_linkage(factored-select-stmt) {{common-table-expression compound-operator expr ordering-term select-core} {}} 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-clause) {{join-constraint join-operator table-or-subquery} {select-core select-stmt}} set syntax_linkage(join-constraint) {expr {join-clause table-or-subquery}} set syntax_linkage(join-operator) {{} join-clause} set syntax_linkage(literal-value) {{} {column-constraint expr}} set syntax_linkage(numeric-literal) {{} {}} set syntax_linkage(ordering-term) {expr {compound-select-stmt delete-stmt-limited factored-select-stmt 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-core select-stmt}} set syntax_linkage(rollback-stmt) {{} sql-stmt} set syntax_linkage(savepoint-stmt) {{} sql-stmt} set syntax_linkage(select-core) {{expr join-clause result-column table-or-subquery} {compound-select-stmt factored-select-stmt simple-select-stmt}} set syntax_linkage(select-stmt) {{common-table-expression compound-operator expr join-clause 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 ordering-term select-core} {}} 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} {join-clause select-core 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 join-clause select-core factored-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} |
Changes to pages/lang.in.
︙ | ︙ | |||
3613 3614 3615 3616 3617 3618 3619 | <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. A SELECT statement does not make any changes to the database. <p>The "[select-stmt]" syntax diagram above attempts to show as much of the | | > | | > > > > | 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 | <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. A SELECT statement does not make any changes to the database. <p>The "[select-stmt]" syntax diagram above attempts to show as much of the SELECT statement syntax as possible in a single diagram, because some readers find that helpful. The following "[factored-select-stmt]" is an alternative syntax diagrams that expresses the same syntax but tries to break the syntax down into smaller chunks. <tcl> RecursiveBubbleDiagram --initially-hidden factored-select-stmt select-core </tcl> <p>Note that there are paths through the syntax diagrams that are not allowed in practice. Some examples: <ul> <li>A [VALUES] clause can be the first element in a [compound SELECT] that uses a [WITH] clause, but a [simple SELECT] that consists of just a [VALUES] clause cannot be preceded by a [WITH] clause. |
︙ | ︙ | |||
3639 3640 3641 3642 3643 3644 3645 | in practice neither SQLite nor any other SQL engine is required to follow this or any other specific process. <tcl>hd_fragment simpleselect {simple SELECT}</tcl> <h3>Simple Select Processing</h3> <p>The core of a SELECT statement is a "simple SELECT" shown by the | | | < < < < < < < < | | 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 | in practice neither SQLite nor any other SQL engine is required to follow this or any other specific process. <tcl>hd_fragment simpleselect {simple SELECT}</tcl> <h3>Simple Select Processing</h3> <p>The core of a SELECT statement is a "simple SELECT" shown by the [select-core] and [simple-select-stmt] syntax diagrams below. In practice, most SELECT statements are simple SELECT statements. <tcl> RecursiveBubbleDiagram simple-select-stmt select-core </tcl> <p>Generating the results of a simple SELECT statement is presented as a four step process in the description below: <ol> <li> <p>[FROM clause] processing: The input data for the simple SELECT is |
︙ | ︙ | |||
4102 4103 4104 4105 4106 4107 4108 | </ul> <h3>The WITH Clause</h3> <p>SELECT statements may be optionally preceded by a single [WITH clause] that defines one or more [common table expressions] | | | < | 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 | </ul> <h3>The WITH Clause</h3> <p>SELECT statements may be optionally preceded by a single [WITH clause] that defines one or more [common table expressions] for use within the SELECT statement. <tcl> ############################################################################## Section UPDATE update {UPDATE *UPDATEs} RecursiveBubbleDiagram update-stmt </tcl> |
︙ | ︙ |
Changes to wrap.tcl.
︙ | ︙ | |||
581 582 583 584 585 586 587 | "<button id='$a' onclick='hideorshow(\"$a\",\"$b\")'>show</button>\ </p>\n\ <blockquote id='$b' style='display:none;'>\n\ <img $alt src=\"$hd(rootpath-aux)images/syntax/$name.gif\"></img>\n\ </blockquote>" } } | | > > > > > > > > > | > > > > > > > > > > > > > > | | | | | < | 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 | "<button id='$a' onclick='hideorshow(\"$a\",\"$b\")'>show</button>\ </p>\n\ <blockquote id='$b' style='display:none;'>\n\ <img $alt src=\"$hd(rootpath-aux)images/syntax/$name.gif\"></img>\n\ </blockquote>" } } proc RecursiveBubbleDiagram_helper {class name openlist exclude} { global hd syntax_linkage set alt "alt=\"syntax diagram $name\"" hd_resolve "<p><b>\[$name:\]</b>\n" set a [hd_id] set b [hd_id] set openflag 0 set open2 {} foreach x $openlist { if {$x==$name} { set openflag 1 } else { lappend open2 $x } } if {$openflag} { puts $hd($class) \ "<button id='$a' onclick='hideorshow(\"$a\",\"$b\")'>hide</button></p>\n\ <blockquote id='$b'>\n\ <img $alt src=\"$hd(rootpath-$class)images/syntax/$name.gif\" />" } else { puts $hd($class) \ "<button id='$a' onclick='hideorshow(\"$a\",\"$b\")'>show</button></p>\n\ <blockquote id='$b' style='display:none;'>\n\ <img $alt src=\"$hd(rootpath-$class)images/syntax/$name.gif\" />" } if {[info exists syntax_linkage($name)]} { foreach {cx px} $syntax_linkage($name) break foreach c $cx { if {[lsearch $exclude $c]>=0} continue RecursiveBubbleDiagram_helper $class $c $open2 [concat $exclude $cx] } } puts $hd($class) "</blockquote>" } proc RecursiveBubbleDiagram {args} { global hd set show 1 set a2 {} foreach name $args { if {$name=="--initially-hidden"} { set show 0 } else { lappend a2 $name } } if {$show} { set showlist $a2 } else { set showlist {} } set name [lindex $a2 0] if {$hd(enable-main)} { RecursiveBubbleDiagram_helper main $name $showlist $name } if {$hd(enable-aux)} { RecursiveBubbleDiagram_helper aux $name $showlist $name } } # Insert a See Also line for related bubble |
︙ | ︙ |