Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | Tweaks to the syntax diagrams to make them more readable. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b28d410e7dc7185dd54402bedb652ea7 |
User & Date: | drh 2009-02-14 19:00:18.000 |
2009-02-16
| ||
16:16 | Additional clarifications to the syntax diagrams. (check-in: 1495fead09 user: drh tags: trunk) | |
2009-02-14
| ||
19:00 | Tweaks to the syntax diagrams to make them more readable. (check-in: b28d410e7d user: drh tags: trunk) | |
2009-02-13
| ||
22:41 | Improvements to the join-op syntax diagram. Do not show the RIGHT and FULL outer join options, since SQLite does not do them (yet). (check-in: 122764735d user: drh tags: trunk) | |
cannot compute difference between binary files
︙ | ︙ | |||
98 99 100 101 102 103 104 | {tailbranch {line ( {loop column-def ,} {loop {} {, table-constraint}} )} {line AS select-stmt} } } } column-def { | | | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | {tailbranch {line ( {loop column-def ,} {loop {} {, table-constraint}} )} {line AS select-stmt} } } } column-def { line /column-name {or type-name nil} {loop nil {nil column-constraint nil}} } type-name { line {loop /name {}} {or {} {line ( signed-number )} {line ( signed-number , signed-number )} } } |
︙ | ︙ | |||
319 320 321 322 323 324 325 | /collation-name {line {optx /database-name .} {tailbranch /table-name /index-name} } } } select-stmt { | | > | > > > | | | | | < < < < | 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 | /collation-name {line {optx /database-name .} {tailbranch /table-name /index-name} } } } select-stmt { stack {loop {line nil select-core nil} {nil compound-operator nil}} {optx ORDER BY {loop ordering-term ,}} {optx LIMIT /integer {optx {or OFFSET ,} /integer}} } select-core { stack {line SELECT {or nil DISTINCT ALL} {loop result-column ,}} {optx FROM join-source} {optx WHERE expr} {optx GROUP BY {loop ordering-term ,} {optx HAVING expr}} } result-column { or * {line /table-name . *} {line expr {optx {optx AS} /column-alias}} |
︙ | ︙ | |||
444 445 446 447 448 449 450 | 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}] \ -width 2 -start 90 -extent -90 -tags $tag -style arc set yr0 [expr {$y0+$RADIUS}] set yr1 [expr {$y1-$RADIUS}] | > > > > > | > | > > > > > > > > > > | > > | 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 | 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}] \ -width 2 -start 90 -extent -90 -tags $tag -style arc set yr0 [expr {$y0+$RADIUS}] set yr1 [expr {$y1-$RADIUS}] if {abs($yr1-$yr0)>$RADIUS*2} { set half_y [expr {($yr1+$yr0)/2}] .c create line $xr1 $yr0 $xr1 $half_y -width 2 -tags $tag -arrow last .c create line $xr1 $half_y $xr1 $yr1 -width 2 -tags $tag } else { .c create line $xr1 $yr0 $xr1 $yr1 -width 2 -tags $tag } .c create arc $xr0 [expr {$y1-2*$RADIUS}] $xr1 $y1 \ -width 2 -start 0 -extent -90 -tags $tag -style arc } else { set r [expr {($y1-$y0)/2.0}] 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. Approximatley 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}] \ -width 2 -start 90 -extent 90 -tags $tag -style arc set yr0 [expr {$y0+$RADIUS}] set yr1 [expr {$y1-$RADIUS}] if {abs($yr1-$yr0)>$RADIUS*3} { set half_y [expr {($yr1+$yr0)/2}] if {$dir=="down"} { .c create line $xr0 $yr0 $xr0 $half_y -width 2 -tags $tag -arrow last .c create line $xr0 $half_y $xr0 $yr1 -width 2 -tags $tag } else { .c create line $xr0 $yr1 $xr0 $half_y -width 2 -tags $tag -arrow last .c create line $xr0 $half_y $xr0 $yr0 -width 2 -tags $tag } } else { .c create line $xr0 $yr0 $xr0 $yr1 -width 2 -tags $tag } # .c create line $xr0 $yr0 $xr0 $yr1 -width 2 -tags $tag .c create arc $xr0 [expr {$y1-2*$RADIUS}] $xr1 $y1 \ -width 2 -start 180 -extent 90 -tags $tag -style arc } else { set r [expr {($y1-$y0)/2.0}] set x0 [expr {$x-$r}] set x1 [expr {$x+$r}] .c create arc $x0 $y0 $x1 $y1 \ |
︙ | ︙ | |||
619 620 621 622 623 624 625 | # Draw a sequence of terms from top to bottom. # proc draw_stack {indent lx} { global tagcnt RADIUS VSEP incr tagcnt set tag x$tagcnt | | > | | 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 | # Draw a sequence of terms from top to bottom. # proc draw_stack {indent lx} { global tagcnt RADIUS VSEP incr tagcnt set tag x$tagcnt set sep [expr {$VSEP*2}] set btm 0 set n [llength $lx] set i 0 set next_bypass_y 0 foreach term $lx { set bypass_y $next_bypass_y if {$i>0 && $i<$n && [llength $term]>1 && ([lindex $term 0]=="opt" || [lindex $term 0]=="optx")} { set bypass 1 set term "line [lrange $term 1 end]" } else { set bypass 0 set next_bypass_y 0 } |
︙ | ︙ | |||
648 649 650 651 652 653 654 | } else { set enter_y [expr {$btm - $ty0 + $sep*2 + 2}] if {$bypass} {set next_bypass_y [expr {$enter_y - $RADIUS}]} set enter_x [expr {$sep*2 + $indent}] set back_y [expr {$btm + $sep + 1}] if {$bypass_y>0} { set mid_y [expr {($bypass_y+$RADIUS+$back_y)/2}] | | | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 | } else { set enter_y [expr {$btm - $ty0 + $sep*2 + 2}] if {$bypass} {set next_bypass_y [expr {$enter_y - $RADIUS}]} set enter_x [expr {$sep*2 + $indent}] set back_y [expr {$btm + $sep + 1}] if {$bypass_y>0} { set mid_y [expr {($bypass_y+$RADIUS+$back_y)/2}] .c create line $bypass_x $bypass_y $bypass_x $mid_y \ -width 2 -tags $tag -arrow last .c create line $bypass_x $mid_y $bypass_x [expr {$back_y+$RADIUS}] \ -tags $tag -width 2 } .c move $t $enter_x $enter_y set e2 [expr {$exit_x + $sep}] .c create line $exit_x $exit_y $e2 $exit_y \ -width 2 -tags $tag draw_right_turnback $tag $e2 $exit_y $back_y set e3 [expr {$enter_x-$sep}] set bypass_x [expr {$e3-$RADIUS}] set emid [expr {($e2+$e3)/2}] .c create line $e2 $back_y $emid $back_y \ -width 2 -tags $tag -arrow last .c create line $emid $back_y $e3 $back_y \ -width 2 -tags $tag set r2 [expr {($enter_y - $back_y)/2.0}] draw_left_turnback $tag $e3 $back_y $enter_y down .c create line $e3 $enter_y $enter_x $enter_y \ -arrow last -width 2 -tags $tag set exit_x [expr {$enter_x + $exx}] set exit_y [expr {$enter_y + $exy}] } .c addtag $tag withtag $t .c dtag $t $t set btm [lindex [.c bbox $tag] 3] incr i } if {$bypass} { set fwd_y [expr {$btm + $sep + 1}] set mid_y [expr {($next_bypass_y+$RADIUS+$fwd_y)/2}] set descender_x [expr {$exit_x+$RADIUS}] .c create line $bypass_x $next_bypass_y $bypass_x $mid_y \ -width 2 -tags $tag -arrow last .c create line $bypass_x $mid_y $bypass_x [expr {$fwd_y-$RADIUS}] \ -tags $tag -width 2 .c create arc $bypass_x [expr {$fwd_y-2*$RADIUS}] \ [expr {$bypass_x+2*$RADIUS}] $fwd_y \ -width 2 -start 180 -extent 90 -tags $tag -style arc .c create arc [expr {$exit_x-$RADIUS}] $exit_y \ $descender_x [expr {$exit_y+2*$RADIUS}] \ -width 2 -start 90 -extent -90 -tags $tag -style arc .c create arc $descender_x [expr {$fwd_y-2*$RADIUS}] \ [expr {$descender_x+2*$RADIUS}] $fwd_y \ -width 2 -start 180 -extent 90 -tags $tag -style arc set exit_x [expr {$exit_x+2*$RADIUS}] set half_x [expr {($exit_x+$indent)/2}] .c create line [expr {$bypass_x+$RADIUS}] $fwd_y $half_x $fwd_y \ -width 2 -tags $tag -arrow last .c create line $half_x $fwd_y $exit_x $fwd_y \ -width 2 -tags $tag .c create line $descender_x [expr {$exit_y+$RADIUS}] \ $descender_x [expr {$fwd_y-$RADIUS}] \ -width 2 -tags $tag -arrow last set exit_y $fwd_y } set width [lindex [.c bbox $tag] 2] return [list $tag $exit_x $exit_y] } proc draw_loop {forward back} { global tagcnt incr tagcnt set tag x$tagcnt set sep $::HSEP set vsep $::VSEP if {$back==","} { set vsep 0 } elseif {$back=="nil"} { set vsep [expr {$vsep/2}] } foreach {ft fexx fexy} [draw_diagram $forward] break foreach {fx0 fy0 fx1 fy1} [.c bbox $ft] break set fw [expr {$fx1-$fx0}] foreach {bt bexx bexy} [draw_backwards_line $back] break foreach {bx0 by0 bx1 by1} [.c bbox $bt] break set bw [expr {$bx1-$bx0}] |
︙ | ︙ | |||
720 721 722 723 724 725 726 | .c create line $bexx $bexy $fx1 $bexy -width 2 -tags $bt -arrow first set mxx $fexx } } elseif {$bw>$fw} { set dx [expr {($bw-$fw)/2}] .c move $ft $dx 0 set fexx [expr {$dx+$fexx}] | | | | 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 | .c create line $bexx $bexy $fx1 $bexy -width 2 -tags $bt -arrow first set mxx $fexx } } elseif {$bw>$fw} { set dx [expr {($bw-$fw)/2}] .c move $ft $dx 0 set fexx [expr {$dx+$fexx}] .c create line 0 0 $dx $fexy -width 2 -tags $ft -arrow last .c create line $fexx $fexy $bx1 $fexy -width 2 -tags $ft set mxx $bexx } .c addtag $tag withtag $bt .c addtag $tag withtag $ft .c dtag $bt $bt .c dtag $ft $ft .c move $tag $sep 0 set mxx [expr {$mxx+$sep}] .c create line 0 0 $sep 0 -width 2 -tags $tag draw_left_turnback $tag $sep 0 $biny up draw_right_turnback $tag $mxx $fexy $bexy foreach {x0 y0 x1 y1} [.c bbox $tag] break set exit_x [expr {$mxx+$::RADIUS}] .c create line $mxx $fexy $exit_x $fexy -width 2 -tags $tag return [list $tag $exit_x $fexy] } |
︙ | ︙ | |||
781 782 783 784 785 786 787 | .c addtag $tag withtag $bt .c addtag $tag withtag $ft .c dtag $bt $bt .c dtag $ft $ft .c move $tag $sep 0 set mxx [expr {$mxx+$sep}] .c create line 0 0 $sep 0 -width 2 -tags $tag | | | 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 | .c addtag $tag withtag $bt .c addtag $tag withtag $ft .c dtag $bt $bt .c dtag $ft $ft .c move $tag $sep 0 set mxx [expr {$mxx+$sep}] .c create line 0 0 $sep 0 -width 2 -tags $tag draw_left_turnback $tag $sep 0 $biny down draw_right_turnback $tag $mxx $fexy $bexy foreach {x0 y0 x1 y1} [.c bbox $tag] break .c create line $mxx $fexy $x1 $fexy -width 2 -tags $tag return [list $tag $x1 $fexy] } proc draw_or {lx} { |
︙ | ︙ |
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
︙ | ︙ | |||
16 17 18 19 20 21 22 | set syntax_linkage(delete-stmt) {{expr qualified-table-name} {create-trigger-stmt sql-stmt}} set syntax_linkage(delete-stmt-limited) {{expr ordering-term qualified-table-name} 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} | | | | | > | | | 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 | set syntax_linkage(delete-stmt) {{expr qualified-table-name} {create-trigger-stmt sql-stmt}} set syntax_linkage(delete-stmt-limited) {{expr ordering-term qualified-table-name} 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} {column-constraint create-trigger-stmt delete-stmt delete-stmt-limited insert-stmt join-constraint ordering-term result-column select-core 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} {create-trigger-stmt sql-stmt}} set syntax_linkage(join-constraint) {expr join-source} set syntax_linkage(join-op) {{} join-source} set syntax_linkage(join-source) {{join-constraint join-op single-source} {select-core single-source}} set syntax_linkage(literal-value) {{} {column-constraint expr}} set syntax_linkage(ordering-term) {expr {delete-stmt-limited select-core 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(reindex-stmt) {{} sql-stmt} set syntax_linkage(release-stmt) {{} sql-stmt} set syntax_linkage(result-column) {expr select-core} set syntax_linkage(rollback-stmt) {{} sql-stmt} set syntax_linkage(savepoint-stmt) {{} sql-stmt} set syntax_linkage(select-core) {{expr join-source ordering-term result-column} select-stmt} set syntax_linkage(select-stmt) {{compound-operator ordering-term select-core} {create-table-stmt create-trigger-stmt create-view-stmt expr insert-stmt single-source sql-stmt}} set syntax_linkage(signed-number) {{} {column-constraint pragma-value type-name}} set syntax_linkage(single-source) {{join-source select-stmt} join-source} 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(type-name) {signed-number {column-def expr}} set syntax_linkage(update-stmt) {{expr qualified-table-name} {create-trigger-stmt sql-stmt}} set syntax_linkage(update-stmt-limited) {{expr ordering-term qualified-table-name} sql-stmt} set syntax_linkage(vacuum-stmt) {{} sql-stmt} 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 delete-stmt delete-stmt-limited detach-stmt drop-index-stmt drop-table-stmt drop-trigger-stmt drop-view-stmt expr raise-function literal-value insert-stmt pragma-stmt pragma-value reindex-stmt select-stmt select-core result-column join-source single-source join-op 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
︙ | ︙ | |||
2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 | information.</p> <tcl> ############################################################################### Section SELECT select {SELECT query} BubbleDiagram select-stmt 1 BubbleDiagram result-column BubbleDiagram join-source BubbleDiagram single-source BubbleDiagram join-op BubbleDiagram join-constraint BubbleDiagram ordering-term BubbleDiagram compound-operator | > | 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 | information.</p> <tcl> ############################################################################### Section SELECT select {SELECT query} BubbleDiagram select-stmt 1 BubbleDiagram select-core BubbleDiagram result-column BubbleDiagram join-source BubbleDiagram single-source BubbleDiagram join-op BubbleDiagram join-constraint BubbleDiagram ordering-term BubbleDiagram compound-operator |
︙ | ︙ |