(List (= scope= flags=0 words=[] bindings=[('SHQL_ROOT', {[DQ [LIT_CHARS /u/shql]]})]) (= scope= flags=0 words=[] bindings=[('EDITOR', {[DQ [VarSub EDITOR test_op=VS_TEST_COLON_EQUALS {[LIT_SLASH /] [LIT_CHARS usr] [LIT_SLASH /] [LIT_CHARS bin] [LIT_SLASH /] [LIT_CHARS vi]}]]})]) (= scope= flags=0 words=[] bindings=[('SHELL', {[DQ [VarSub SHELL test_op=VS_TEST_COLON_EQUALS {[LIT_SLASH /] [LIT_CHARS bin] [LIT_SLASH /] [LIT_CHARS sh]}]]})]) (= scope= flags=0 words=[] bindings=[('AWK', {[LIT_CHARS mawk]})]) (= scope= flags=0 words=[] bindings=[('DEBUG', {[DQ [LIT_CHARS N]]})]) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub DEBUG]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Y]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS set]} {[LIT_CHARS -x]} ) ) (= scope= flags=0 words=[] bindings=[('UMASK', {[ComSub (Com {[LIT_CHARS umask]})]})]) (Com {[LIT_CHARS umask]} {[LIT_CHARS 0000]} ) (Com {[LIT_CHARS trap]} {[DQ [LIT_CHARS "echo "][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS Goodbye][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " ; "][LIT_CHARS " rm -f /tmp/"][VarSub $][LIT_CHARS " /tmp/"][VarSub $][LIT_CHARS "row /tmp/"][VarSub $][LIT_CHARS "join*"]]} {[LIT_CHARS 0]} {[LIT_CHARS 1]} {[LIT_CHARS 2]} {[LIT_CHARS 3]} {[LIT_CHARS 15]} ) (Com {[LIT_CHARS set]} {[LIT_CHARS -h]} ) (If (Pipeline (Com {[LIT_CHARS echo]} {[SQ ]} ) (Com {[LIT_CHARS grep]} {[LIT_CHARS -s]} {[LIT_CHARS c]} ) ) (List (= scope= flags=0 words=[] bindings=[('NOCR1', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('NOCR2', {[DQ ]})]) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('NOCR1', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('NOCR2', {[SQ ]})]) ) ) (= scope= flags=0 words=[] bindings=[('NL', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('TAB', {[SQ ]})]) (= scope= flags=1 words=[{[LIT_CHARS _IFS]}, {[LIT_CHARS TABLE]}, {[LIT_CHARS CMD]}, {[LIT_CHARS NOCR1]}, {[LIT_CHARS NOCR2]}, {[LIT_CHARS NL]}, {[LIT_CHARS TAB]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('_IFS', {[DQ [VarSub IFS]]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS X-q]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('QUIET', {[DQ [LIT_CHARS Y]]})]) (Com {[LIT_CHARS shift]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS X]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Missing database name."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "The database name must be a directory under "][VarSub HOME][LIT_CHARS /shql]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "\tor a directory under "][VarSub SHQL_ROOT]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Database: "][VarSub 1]]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -d]} {[VarSub HOME] [LIT_CHARS /shql/] [VarSub 1]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS cd]} {[VarSub HOME] [LIT_CHARS /shql/] [VarSub 1]} ) (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -d]} {[VarSub SHQL_ROOT] [LIT_CHARS /] [VarSub 1]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS cd]} {[VarSub SHQL_ROOT] [LIT_CHARS /] [VarSub 1]} ) (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -d]} {[VarSub HOME] [LIT_CHARS /] [VarSub 1]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS cd]} {[VarSub HOME] [LIT_CHARS /] [VarSub 1]} ) (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -d]} {[VarSub 1]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS cd]} {[VarSub 1]} ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Unknown database ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "The database name must be a directory under "][VarSub HOME][LIT_CHARS /shql]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "\tor a directory under "][VarSub SHQL_ROOT]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (FunctionDef syntax [] (List (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS create]}], [{[LIT_CHARS delete]}], [{[LIT_CHARS drop]}], [{[LIT_CHARS edit]}], [{[LIT_CHARS help]}], [{[LIT_CHARS insert]}], [{[LIT_CHARS print]}], [{[LIT_CHARS select]}], [{[LIT_CHARS update]}], [{[LIT_CHARS where]}], [{[LIT_CHARS syntax]}]] (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "CREATE TABLE table_name (\n"] [LIT_CHARS "\tcolumn_name column_width \n"] [LIT_CHARS "\t{, ...} \n"] [LIT_CHARS ") \t\n"] [LIT_CHARS "or\n"] [LIT_CHARS "CREATE VIEW view_name (\n"] [LIT_CHARS "\ttable_or_view1.column1 = table_or_view2.column2\n"] [LIT_CHARS ")\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "DELETE \n"] [LIT_CHARS "FROM table_name\t\n"] [LIT_CHARS "{ WHERE where_clause }\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "DROP TABLE table_name\n"] [LIT_CHARS "or\n"] [LIT_CHARS "DROP VIEW view_name\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "EDIT table_name\n"] [LIT_CHARS "is a non-standard method of changing a table's field names or display widths.\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "HELP ALL\n"] [LIT_CHARS "or\n"] [LIT_CHARS "HELP TABLES \n"] [LIT_CHARS "or\n"] [LIT_CHARS "HELP VIEWS\n"] [LIT_CHARS "or\n"] [LIT_CHARS "HELP COMMANDS\n"] [LIT_CHARS "or\n"] [LIT_CHARS "HELP [CREATE | DELETE | DROP | INSERT | SELECT | UPDATE | WHERE | PRINT | EDIT]\n"] [LIT_CHARS "or\n"] [LIT_CHARS "HELP table_name\n"] [LIT_CHARS "Commands must appear in lower case.\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "INSERT INTO table_name \n"] [LIT_CHARS "\t{ ( column_name, ... ) }\n"] [LIT_CHARS "VALUES ( expression, ...)\n"] [LIT_CHARS "or\t\t\n"] [LIT_CHARS "INSERT INTO table_name \n"] [LIT_CHARS "\t{ ( column_name, ... ) }\n"] [LIT_CHARS "subselect\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "PRINT table_name \n"] [LIT_CHARS "is a non-standard synonym for SELECT * FROM table_name.\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "SELECT { DISTINCT } \n"] [LIT_CHARS "\t[ column_name {,...} | * ]\n"] [LIT_CHARS "FROM [ table_name | view_name ]\n"] [LIT_CHARS "{ WHERE where_clause }\n"] [LIT_CHARS "{ ORDER BY column_name { NUM } { ASC | DESC } {, ... }\n"] [LIT_CHARS "{ UNION select statement }\n"] [LIT_CHARS "'NUM' is a non-standard method for sorting numeric fields.\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "UPDATE table_name\n"] [LIT_CHARS "SET column_name = expression {, ... }\n"] [LIT_CHARS "{ WHERE where_clause }\n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "WHERE [ column_name | value ] [ =, !=, >, <, >=, <=, and, or, not, in ]\n"] [LIT_CHARS " [ column_name | value | subselect ]\n"] [LIT_CHARS "Parentheses may be used to group expressions. \n"]} 0), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) (List (Com {[LIT_CHARS syntax]} {[LIT_CHARS commands]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS create]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS delete]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS drop]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS insert]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS select]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS update]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS where]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS print]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS edit]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (FunctionDef lookup_field [] (List (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[VarSub TABLE] [LIT_OTHER "%"]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [ComSub (Com {[LIT_CHARS grep]} {[LIT_CHARS -n]} {[\ LIT_ESCAPED_CHAR "\\\""] [LIT_OTHER "^"] [VarSub 1]} {[\ LIT_ESCAPED_CHAR "\\\""]} {[VarSub TABLE] [LIT_OTHER "@"]})]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS grep]} {[LIT_CHARS -n]} {[\ LIT_ESCAPED_CHAR "\\\""] [LIT_OTHER "^"] [VarSub 1]} {[\ LIT_ESCAPED_CHAR "\\\""]} {[VarSub TABLE] [LIT_OTHER "@"]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS 1q]}) )]]})]) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub RESULT]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('OUTFIELD', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('OUTFIELDNUM', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub RESULT]]} {[LIT_OTHER ":"]} {[SQ ]})]]})]) (= scope= flags=0 words=[] bindings=[('OUTFIELD', {[DQ [\ LIT_ESCAPED_CHAR "\\$"][VarSub OUTFIELDNUM]]})]) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) ) ) ) (FunctionDef do_aggreg [] (List (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[SQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('AGGREG', {[SQ ]})]) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[SQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('AGGREG', {[SQ ]})]) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[SQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('AGGREG', {[SQ ]})]) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[SQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('AGGREG', {[SQ ]})]) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[SQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('AGGREG', {[SQ ]})]) (ElseTrue) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 2]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X("]]} {[LIT_CHARS -o]} {[DQ [LIT_CHARS X][VarSub 4]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X)"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad aggregate syntax"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS select]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) (= scope= flags=0 words=[] bindings=[('AGGFIELD', {[DQ [VarSub 3]]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 4]} ) (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub AGGFIELD]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad field name ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xwhere]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS break]} ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xorder]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS break]} ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xunion]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS break]} ) ) (Com {[LIT_CHARS shift]} ) ) ) (= scope= flags=0 words=[] bindings=[('OUTFIELD', {[ComSub (Pipeline (Subshell (List (= scope= flags=0 words=[] bindings=[('SUBSELECT', {[DQ [LIT_CHARS Y]]})]) (= scope= flags=0 words=[] bindings=[('AGGREGATE', {[DQ [LIT_CHARS Y]]})]) (Com {[LIT_CHARS select_]} {[DQ [LIT_CHARS select]]} {[DQ [VarSub AGGFIELD]]} {[DQ [LIT_CHARS from]]} {[DQ [VarSub TABLE]]} {[DQ [VarSub @]]}) ) ) (Com {[VarSub AWK]} {[LIT_CHARS -F] [DQ [LIT_CHARS "\t"]]} {[SQ max { max = $1 }\n"> ] [VarSub AGGREG] [SQ ]}) )]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub RESULT]]} {[LIT_OTHER ":"]} {[SQ ]})]} {[LIT_CHARS -lt]} {[LIT_CHARS 10]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('RESULT', {[DQ [VarSub AGGFIELD][LIT_CHARS "\t10"]]})]) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) ) (FunctionDef do_join [] (List (Com {[LIT_CHARS update_view]} {[DQ [VarSub 1]]} ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub 2]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad view specifcation ("][VarSub 1][LIT_CHARS .][VarSub 2][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (= scope= flags=0 words=[] bindings=[('JFIELD1', {[DQ [VarSub OUTFIELDNUM]]})]) (= scope= flags=0 words=[] bindings=[('JFIELD1L1', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[VarSub JFIELD1]} {[LIT_CHARS -]} {[LIT_CHARS 1]})]]})]) (Com {[LIT_CHARS update_view]} {[DQ [VarSub 3]]} ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub 3]]})]) (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub 4]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad view specifcation ("][VarSub 3][LIT_CHARS .][VarSub 4][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (= scope= flags=0 words=[] bindings=[('JFIELD2', {[DQ [VarSub OUTFIELDNUM]]})]) (= scope= flags=0 words=[] bindings=[('JFIELD2L1', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[VarSub JFIELD2]} {[LIT_CHARS -]} {[LIT_CHARS 1]})]]})]) (Subshell (List (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS "^"][VarSub 2][LIT_CHARS "\t"]]} {[VarSub 1] [LIT_OTHER "@"]} ) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[DQ [LIT_CHARS "^"][VarSub 2][LIT_CHARS "\t"]]} {[VarSub 1] [LIT_OTHER "@"]} ) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[DQ [LIT_CHARS "^"][VarSub 4][LIT_CHARS "\t"]]} {[VarSub 3] [LIT_OTHER "@"]} ) ) ) (Com {[LIT_CHARS sort]} {[LIT_CHARS -t] [\ LIT_ESCAPED_CHAR "\\\t"]} {[LIT_OTHER "+"] [VarSub JFIELD2L1]} {[VarSub 3] [LIT_TILDE "~"]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $]} "> 1), > ) (Pipeline (Com {[LIT_CHARS sort]} {[LIT_CHARS -t] [\ LIT_ESCAPED_CHAR "\\\t"]} {[LIT_OTHER "+"] [VarSub JFIELD1L1]} {[VarSub 1] [LIT_TILDE "~"]} ) (Com {[LIT_CHARS join]} {[LIT_CHARS -t] [\ LIT_ESCAPED_CHAR "\\\t"]} {[LIT_CHARS -j1]} {[VarSub JFIELD1]} {[LIT_CHARS -j2]} {[VarSub JFIELD2]} {[LIT_CHARS -]} {[LIT_CHARS /tmp/] [VarSub $]} < (FilenameRedirectNode filename={[VarSub 5] [LIT_TILDE "~"]} "> 1), > ) ) ) ) (FunctionDef update_view [] (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub 1][LIT_CHARS "%"]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (Subshell (Com {[LIT_CHARS do_join]} {[ComSub (Com {[LIT_CHARS cat]} {[VarSub 1] [LIT_OTHER "%"]})]} ) ) ) ) (FunctionDef where [] (List (Com {[LIT_CHARS shift]} ) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_CHARS -a]} {[DQ [VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS order]]} {[LIT_CHARS -a]} {[DQ [VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS union]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xselect]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS set]} {[LIT_CHARS X]} {[ComSub (Subshell (List (= scope= flags=0 words=[] bindings=[('SUBSELECT', {[DQ [LIT_CHARS Y]]})]) (Com {[LIT_CHARS select_]} {[DQ [VarSub @]]}) ) )]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS shift]} ) (ElseTrue) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS and]}], [{[LIT_CHARS or]}], [{[LIT_CHARS not]}], [{[LIT_DBRACKET_LIKE "="]}], [{[SQ ]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [VarSub WHERE][LIT_CHARS " && "]]})]) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [VarSub WHERE][LIT_CHARS " || "]]})]) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [VarSub WHERE][LIT_CHARS " !"]]})]) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [VarSub WHERE][LIT_CHARS " == "]]})]) (List (Com {[LIT_CHARS shift]} ) (Com {[LIT_CHARS set]} {[LIT_CHARS X]} {[ComSub (Subshell (List (= scope= flags=0 words=[] bindings=[('SUBSELECT', {[SQ ]})]) (Com {[LIT_CHARS select_]} {[DQ [VarSub @]]}) ) )]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS shift]} ) (ElseTrue) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (= scope= flags=0 words=[] bindings=[('INWHERE', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('COMP', {[DQ [LIT_CHARS "=="]]})]) (= scope= flags=0 words=[] bindings=[('LOGIC', {[DQ [LIT_CHARS "||"]]})]) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub LAST]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xnot]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('COMP', {[DQ [LIT_CHARS "="]]})]) (= scope= flags=0 words=[] bindings=[('LOGIC', {[DQ [LIT_CHARS "&&"]]})]) ) ) (For VALUE do_arg_iter) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub INWHERE]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS X]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('INWHERE', {[DQ [VarSub INWHERE][LIT_CHARS " "][VarSub LOGIC]]})]) ) (= scope= flags=0 words=[] bindings=[('INWHERE', {[DQ [VarSub INWHERE][LIT_CHARS " ("][VarSub WHERE][VarSub COMP][LIT_CHARS " "][VarSub VALUE][LIT_CHARS ") "]]})]) ) ) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [VarSub INWHERE]]})]) (Com {[LIT_CHARS break]} ) ) (List (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub 1]]} ) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [VarSub WHERE][LIT_CHARS " "][VarSub OUTFIELD]]})]) ) ) (= scope= flags=0 words=[] bindings=[('LAST', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub WHERE]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [LIT_CHARS " ( "][VarSub WHERE][LIT_CHARS " ) "]]})]) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Missing 'where' clause"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS where]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (FunctionDef help [] (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub 2]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Ambiguous syntax, try:"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS help]} ) ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS all]]} {[LIT_DBRACKET_LIKE "]"]} ) (Pipeline (Com {[LIT_CHARS ls]} {[LIT_OTHER "*"] [LIT_OTHER "@"]} {[LIT_OTHER "*"] [LIT_OTHER "%"]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [LIT_OTHER "@"]} {[LIT_CHARS -f1]} ) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [LIT_OTHER "%"]} {[LIT_CHARS -f1]} ) (Com {[LIT_CHARS uniq]} ) ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS tables]]} {[LIT_DBRACKET_LIKE "]"]} ) (Pipeline (Com {[LIT_CHARS ls]} {[LIT_OTHER "*"] [LIT_OTHER "@"]} {[LIT_OTHER "*"] [LIT_OTHER "%"]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [LIT_OTHER "@"]} {[LIT_CHARS -f1]} ) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [LIT_OTHER "%"]} {[LIT_CHARS -f1]} ) (Com {[LIT_CHARS uniq]} {[LIT_CHARS -u]} ) ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS views]]} {[LIT_DBRACKET_LIKE "]"]} ) (Pipeline (Com {[LIT_CHARS ls]} {[LIT_OTHER "*"] [LIT_OTHER "%"]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [LIT_OTHER "%"]} {[LIT_CHARS -f1]} ) ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS commands]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=False body_word={[LIT_CHARS "/p is print\n"] [LIT_CHARS "/g is go(execute)\n"] [LIT_CHARS "/q is quit\n"] [LIT_CHARS "/e is edit\n"] [LIT_CHARS "/i is include\n"] [LIT_CHARS "/w is write\n"] [LIT_CHARS "/r is reset(clear)\n"] [LIT_CHARS "/s is shell\n"] [LIT_CHARS "/p/g print and go\n"] [LIT_CHARS "The number sign(#) may be used at the start of a line for comments.\n"]} 0), > ) (ElseTrue) (List (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[VarSub 2]} ) (Com {[LIT_CHARS return]} ) ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub 2]]})]) (Com {[LIT_CHARS update_view]} {[DQ [VarSub TABLE]]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -f]} {[DQ [VarSub 2][LIT_CHARS "@"]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [VarSub NL][LIT_CHARS " <"][VarSub 2][LIT_CHARS ">"]]} ) (Com {[LIT_CHARS cat]} {[DQ [VarSub 2][LIT_CHARS "@"]]} ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -f]} {[DQ [VarSub 2][LIT_CHARS "%"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[VarSub NOCR1]} {[DQ [VarSub NL][LIT_CHARS " View:\t"][VarSub NOCR2]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS set]} {[LIT_CHARS X]} {[ComSub (Com {[LIT_CHARS cat]} {[VarSub 2] [LIT_OTHER "%"]})]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS shift]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub 1][LIT_CHARS .][VarSub 2][LIT_CHARS " = "][VarSub 3][LIT_CHARS .][VarSub 4]]} ) ) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub NL][LIT_CHARS " Rows:\t"]] [ComSub (Pipeline (Com {[LIT_CHARS cat]} {[VarSub TABLE] [LIT_TILDE "~"]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) )]} ) ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub TABLE][LIT_CHARS " does not exist."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS help]} ) ) ) ) ) ) (FunctionDef create [] (List (Com {[LIT_CHARS shift]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -f]} {[DQ [VarSub 2][LIT_CHARS "@"]]} {[LIT_CHARS -o]} {[LIT_CHARS -f]} {[DQ [VarSub 2][LIT_CHARS "%"]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Table already exists."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xview]]} {[LIT_CHARS -a]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 2]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS shift]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -ne]} {[LIT_CHARS 6]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS create]} ) (ElseTrue) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 2]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X("]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad syntax"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS create]} ) (Com {[LIT_CHARS return]} ) ) ) ) (= scope= flags=0 words=[] bindings=[('TABLE1', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[VarSub 3]} {[LIT_OTHER ":"]} {[SQ ]})]]})]) (= scope= flags=0 words=[] bindings=[('FIELD1', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[VarSub 3]} {[LIT_OTHER ":"]} {[SQ ]})]]})]) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub TABLE1]]})]) (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub FIELD1]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad table or field name"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 4]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X="]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad syntax"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS create]} ) (Com {[LIT_CHARS return]} ) ) ) ) (= scope= flags=0 words=[] bindings=[('TABLE2', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[VarSub 5]} {[LIT_OTHER ":"]} {[SQ ]})]]})]) (= scope= flags=0 words=[] bindings=[('FIELD2', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[VarSub 5]} {[LIT_OTHER ":"]} {[SQ ]})]]})]) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub TABLE2]]})]) (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub FIELD2]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad table or field name"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 2]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X("]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad syntax"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS create]} ) (Com {[LIT_CHARS return]} ) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub TABLE1][LIT_CHARS " "][VarSub FIELD1][LIT_CHARS " "][VarSub TABLE2][LIT_CHARS " "][VarSub FIELD2][LIT_CHARS " "][VarSub 1]]} < (FilenameRedirectNode filename={[VarSub 1] [LIT_OTHER "%"]} "> 1), > ) (Com {[LIT_CHARS update_view]} {[DQ [VarSub 1]]} ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS OK]]} ) ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xtable]]} {[LIT_CHARS -a]} {[VarSub #]} {[LIT_CHARS -ge]} {[LIT_CHARS 5]} {[LIT_DBRACKET_LIKE "]"]} ) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 3]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X("]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad syntax"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS create]} ) (Com {[LIT_CHARS return]} ) ) ) ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub 2]]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 3]} ) (Com < (FilenameRedirectNode filename={[VarSub TABLE] [LIT_OTHER "@"]} "> 1), > ) (Com < (FilenameRedirectNode filename={[VarSub TABLE] [LIT_TILDE "~"]} "> 1), > ) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -ge]} {[LIT_CHARS 2]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub 1][LIT_CHARS "\t"][VarSub 2]]} < (FilenameRedirectNode filename={[VarSub TABLE] [LIT_OTHER "@"]} >"> 1), > ) (Com {[LIT_CHARS shift]} {[LIT_CHARS 2]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X)"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad syntax"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[VarSub TABLE] [LIT_DBRACKET_LIKE "["] [LIT_OTHER "@"] [LIT_TILDE "~"] [LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS create]} ) (Com {[LIT_CHARS return]} ) ) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS OK]]} ) ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Improper syntax ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS syntax]} {[LIT_CHARS create]} ) ) ) (Com {[LIT_CHARS return]} ) ) ) (FunctionDef drop [] (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 2]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS table]]} {[LIT_CHARS -a]} {[DQ [VarSub 2]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS view]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Syntax error."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS drop]} ) (Com {[LIT_CHARS return]} ) ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS table]]} {[LIT_CHARS -a]} {[LIT_CHARS -f]} {[DQ [VarSub 3][LIT_CHARS "%"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Can not drop, "][VarSub 2][LIT_CHARS " is a view, not a table"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS view]]} {[LIT_CHARS -a]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub 3][LIT_CHARS "%"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Can not drop, "][VarSub 2][LIT_CHARS " is not a view"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -f]} {[DQ [VarSub 3][LIT_CHARS "@"]]} {[LIT_CHARS -o]} {[LIT_CHARS -f]} {[DQ [VarSub 3][LIT_CHARS "%"]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[VarSub 3] [LIT_OTHER "@"]} {[VarSub 3] [LIT_TILDE "~"]} {[VarSub 3] [LIT_OTHER "%"]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS OK]]} ) ) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No such table"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) ) ) ) (FunctionDef insert [] (List (Com {[LIT_CHARS shift]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xinto]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Improper syntax ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS insert]} ) (Com {[LIT_CHARS return]} ) ) ) ) (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub 1]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS update_view]} {[DQ [VarSub TABLE]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Can not insert into a view"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub TABLE][LIT_CHARS "@"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Table does not exist"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('ATTRIB', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS cat]} {[VarSub TABLE] [LIT_OTHER "@"]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) )]]})]) (= scope= flags=0 words=[] bindings=[('XASGN', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('XECHO', {[DQ [LIT_CHARS "echo "][\ LIT_ESCAPED_CHAR "\\\""]]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_CHARS -a]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS "X("]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('ATTRIB2', {[DQ [LIT_CHARS 0]]})]) (Com {[LIT_CHARS shift]} ) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_CHARS -a]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X)"]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub 1]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad field name. ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (= scope= flags=0 words=[] bindings=[('XASGN', {[DQ [VarSub XASGN][LIT_CHARS " X"][VarSub OUTFIELDNUM][LIT_CHARS "="][\ LIT_ESCAPED_CHAR "\\`"][LIT_CHARS "eval echo "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS 1][\ LIT_ESCAPED_CHAR "\\`"][LIT_CHARS " ; shift;"]]})]) (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('ATTRIB2', {[ComSub (Com {[LIT_CHARS expr]} {[VarSub ATTRIB2]} {[LIT_OTHER "+"]} {[LIT_CHARS 1]})]})]) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X)"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Syntax error ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS insert]} ) (Com {[LIT_CHARS return]} ) ) ) ) (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('POS', {[DQ [LIT_CHARS 1]]})]) (While (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub POS]]} {[LIT_CHARS -le]} {[DQ [VarSub ATTRIB]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS eval]} {[LIT_CHARS X] [VarSub POS] [LIT_DBRACKET_LIKE "="] [DQ ]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub POS]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS 1]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('XECHO', {[DQ [VarSub XECHO][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS TAB]]})]) ) (= scope= flags=0 words=[] bindings=[('XECHO', {[DQ [VarSub XECHO][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS X][VarSub POS]]})]) (= scope= flags=0 words=[] bindings=[('POS', {[ComSub (Com {[LIT_CHARS expr]} {[VarSub POS]} {[LIT_OTHER "+"]} {[LIT_CHARS 1]})]})]) ) ) (= scope= flags=0 words=[] bindings=[('XECHO', {[DQ [VarSub XECHO][\ LIT_ESCAPED_CHAR "\\\""]]})]) (= scope= flags=0 words=[] bindings=[('ATTRIB', {[DQ [VarSub ATTRIB2]]})]) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xselect]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS eval]} {[LIT_CHARS set]} {[LIT_CHARS X]} {[DQ [ComSub (Subshell (List (= scope= flags=0 words=[] bindings=[('SUBSELECT', {[SQ ]})]) (Com {[LIT_CHARS select_]} {[DQ [VarSub @]]}) ) )][LIT_CHARS " "][\ LIT_ESCAPED_CHAR "\\)"]]} ) (Com {[LIT_CHARS shift]} ) ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xvalues]]} {[LIT_CHARS -o]} {[DQ [LIT_CHARS X][VarSub 2]]} {[LIT_NEQUAL "!="]} {[SQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Improper syntax ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS insert]} ) (Com {[LIT_CHARS return]} ) ) ) (ElseTrue) (Com {[LIT_CHARS shift]} {[LIT_CHARS 2]} ) ) (For LAST do_arg_iter) (Com {[LIT_OTHER ":"]} ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub LAST]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS "X)"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Improper syntax"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS insert]} ) (Com {[LIT_CHARS return]} ) ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [ComSub (Com {[LIT_CHARS expr]} {[\ LIT_ESCAPED_CHAR "\\("]} {[VarSub #]} {[LIT_CHARS -]} {[LIT_CHARS 1]} {[\ LIT_ESCAPED_CHAR "\\)"]} {[LIT_OTHER "%"]} {[VarSub ATTRIB]})]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Incorrect number of values."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('ROWS', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[\ LIT_ESCAPED_CHAR "\\("]} {[VarSub #]} {[LIT_CHARS -]} {[LIT_CHARS 1]} {[\ LIT_ESCAPED_CHAR "\\)"]} {[LIT_CHARS /]} {[VarSub ATTRIB]})]]})]) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 1]} {[LIT_DBRACKET_LIKE "]"]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub XASGN]]} {[LIT_DBRACKET_LIKE "="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[VarSub NOCR1]} {[DQ [ComSub (Com {[LIT_CHARS eval]} {[LIT_CHARS echo]} {[VarSub 1]})][VarSub NOCR2]]} < (FilenameRedirectNode filename={[VarSub TABLE] [LIT_TILDE "~"]} >"> 1), > ) (Com {[LIT_CHARS shift]} ) (While (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [ComSub (Com {[LIT_CHARS expr]} {[\ LIT_ESCAPED_CHAR "\\("]} {[VarSub #]} {[LIT_CHARS -]} {[LIT_CHARS 1]} {[\ LIT_ESCAPED_CHAR "\\)"]} {[LIT_OTHER "%"]} {[VarSub ATTRIB]})]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[VarSub NOCR1]} {[DQ [VarSub TAB][ComSub (Com {[LIT_CHARS eval]} {[LIT_CHARS echo]} {[VarSub 1]})][VarSub NOCR2]]} < (FilenameRedirectNode filename={[VarSub TABLE] [LIT_TILDE "~"]} >"> 1), > ) (Com {[LIT_CHARS shift]} ) ) ) (Com {[LIT_CHARS echo]} {[DQ ]} < (FilenameRedirectNode filename={[VarSub TABLE] [LIT_TILDE "~"]} >"> 1), > ) ) (ElseTrue) (List (Com {[LIT_CHARS eval]} {[VarSub XASGN]} ) (Com {[LIT_CHARS eval]} {[VarSub XECHO]} < (FilenameRedirectNode filename={[VarSub TABLE] [LIT_TILDE "~"]} >"> 1), > ) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "("][VarSub ROWS][LIT_CHARS " rows)"]]} ) ) ) ) ) (FunctionDef delete [] (List (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub 2]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS update_view]} {[DQ [VarSub TABLE]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "You can not delete from a view."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub TABLE][LIT_CHARS "@"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [VarSub TABLE][LIT_CHARS " does not exit."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ ]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 3]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xwhere]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS shift]} {[LIT_CHARS 2]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS where]} {[DQ [VarSub @]]} ) (AndOr OP_AND_IF (Com {[VarSub AWK]} {[LIT_CHARS -F] [DQ [LIT_CHARS "\t"]]} {[DQ [LIT_CHARS "! "][VarSub WHERE][LIT_CHARS " { cnt += 1 ; print } \n"][LIT_CHARS "\t\t\tEND { printf "][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "( %1d rows.)"][\ LIT_ESCAPED_CHAR "\\\\"][LIT_CHARS n][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ", (NR - cnt) "][LIT_CHARS "\t\t\t>"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS /tmp/][VarSub $][LIT_CHARS row][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " }"]]} {[VarSub TABLE] [LIT_TILDE "~"]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS mv]} {[LIT_CHARS /tmp/] [VarSub $]} {[VarSub TABLE] [LIT_TILDE "~"]} ) (Com {[LIT_CHARS cat]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS row]} ) ) ) ) ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[SQ ] [ComSub (Pipeline (Com {[LIT_CHARS cat]} {[VarSub TABLE] [LIT_TILDE "~"]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) )] [SQ ]} ) (Com < (FilenameRedirectNode filename={[VarSub TABLE] [LIT_TILDE "~"]} "> 1), > ) ) ) ) ) (FunctionDef update [] (List (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub 2]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS update_view]} {[DQ [VarSub TABLE]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Can not update a view."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub TABLE][LIT_CHARS "@"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [VarSub TABLE][LIT_CHARS " does not exit."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 3]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xset]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Improper syntax."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS update]} ) (Com {[LIT_CHARS return]} ) ) ) ) (Com {[LIT_CHARS shift]} {[LIT_CHARS 3]} ) (= scope= flags=0 words=[] bindings=[('ASSIGN', {[DQ ]})]) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_CHARS -a]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xwhere]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (AndOr OP_AND_IF (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub 1]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS "X="]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('ASSIGN', {[DQ [VarSub ASSIGN][LIT_CHARS " ; "]]})]) ) ) (= scope= flags=0 words=[] bindings=[('ASSIGN', {[DQ [VarSub ASSIGN][LIT_CHARS " "][VarSub OUTFIELD]]})]) (Com {[LIT_CHARS shift]} ) ) ) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ ]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xwhere]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS where]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS return]} ) ) ) (AndOr OP_AND_IF (Com {[VarSub AWK]} {[LIT_CHARS -F] [DQ [LIT_CHARS "\t"]]} {[DQ [LIT_CHARS "BEGIN { OFS = "][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "\t"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " }\n"][LIT_CHARS "\t\t"][VarSub WHERE][LIT_CHARS " \t{ "][VarSub ASSIGN][LIT_CHARS "; cnt += 1 }\n"][LIT_CHARS "\t\t\t{ print } \n"][LIT_CHARS "\t\tEND \t{ printf "][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "( %1d rows)"][\ LIT_ESCAPED_CHAR "\\\\"][LIT_CHARS n][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ", cnt >"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS /tmp/][VarSub $][LIT_CHARS row][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " }"]]} {[VarSub TABLE] [LIT_TILDE "~"]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS mv]} {[LIT_CHARS /tmp/] [VarSub $]} {[VarSub TABLE] [LIT_TILDE "~"]} ) (Com {[LIT_CHARS cat]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS row]} ) ) ) ) ) (FunctionDef select_ [] (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub DEBUG]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Y]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS set]} {[LIT_CHARS -x]} ) ) (= scope= flags=0 words=[] bindings=[('UNION', {[DQ [LIT_CHARS Y]]})]) (While (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub UNION]]} {[LIT_NEQUAL "!="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('INAGG', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('FROM', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('UNION', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ ]})]) (For ATABLE do_arg_iter) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub ATABLE]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xwhere]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS break]} ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub ATABLE]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xorder]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS break]} ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub ATABLE]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xunion]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS break]} ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub ATABLE]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xfrom]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('FROM', {[DQ [LIT_CHARS Y]]})]) (Com {[LIT_CHARS continue]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub FROM]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub ATABLE][LIT_CHARS "@"]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [VarSub ATABLE][LIT_CHARS " does not exist."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub TABLE]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub ATABLE]]})]) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('JTABLE', {[DQ [VarSub TABLE]]})]) (= scope= flags=0 words=[] bindings=[('PREV', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('PPREV', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('FOUND', {[DQ ]})]) (For GETJ do_arg_iter) (List (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub PREV]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS "="]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub JTABLE]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub PPREV]]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub ATABLE]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub GETJ]]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('FOUND', {[DQ [LIT_CHARS Y1]]})]) (Com {[LIT_CHARS break]} ) ) ) ) ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub ATABLE]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub PPREV]]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [VarSub JTABLE]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub GETJ]]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('FOUND', {[DQ [LIT_CHARS Y2]]})]) (Com {[LIT_CHARS break]} ) ) ) ) ) ) ) (= scope= flags=0 words=[] bindings=[('PPREV', {[DQ [VarSub PREV]]})]) (= scope= flags=0 words=[] bindings=[('PREV', {[DQ [VarSub GETJ]]})]) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub FOUND]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Join not found, "][\ LIT_ESCAPED_CHAR "\\c"]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "try reordering tables."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub FOUND]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Y1]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub JTABLE][LIT_CHARS "\t"][VarSub PPREV][LIT_CHARS "\t"][VarSub ATABLE][LIT_CHARS "\t"][VarSub GETJ][LIT_CHARS "\t/tmp/"][VarSub $][LIT_CHARS join2]]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join2] [LIT_OTHER "%"]} "> 1), > ) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [VarSub ATABLE][LIT_CHARS "\t"][VarSub PPREV][LIT_CHARS "\t"][VarSub JTABLE][LIT_CHARS "\t"][VarSub GETJ][LIT_CHARS "\t/tmp/"][VarSub $][LIT_CHARS join2]]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join2] [LIT_OTHER "%"]} "> 1), > ) ) (Com {[LIT_CHARS update_view]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join2]} ) (Com {[LIT_CHARS mv]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join2] [LIT_TILDE "~"]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join] [LIT_TILDE "~"]} ) (Com {[LIT_CHARS mv]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join2] [LIT_OTHER "@"]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join] [LIT_OTHER "@"]} ) (Com {[LIT_CHARS expr]} {[DQ [VarSub RESULT]]} {[LIT_OTHER ":"]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join] [LIT_OTHER "@"]} >"> 1), > ) (Pipeline (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [\ LIT_ESCAPED_CHAR "\\\t"]} {[LIT_CHARS -f1]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join] [LIT_TILDE "~"]} ) (Com {[LIT_CHARS paste]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join] [LIT_TILDE "~"]} {[LIT_CHARS -]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $]} "> 1), > ) ) (Com {[LIT_CHARS mv]} {[LIT_CHARS /tmp/] [VarSub $]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS join] [LIT_TILDE "~"]} ) (= scope= flags=0 words=[] bindings=[('TABLE', {[DQ [LIT_CHARS /tmp/][VarSub $][LIT_CHARS join]]})]) ) ) ) ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub FROM]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Syntax error."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS select]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) (Com {[LIT_CHARS update_view]} {[DQ [VarSub TABLE]]} ) (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('DISTINCT', {[DQ ]})]) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xdistinct]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('DISTINCT', {[DQ [LIT_CHARS Y]]})]) (Com {[LIT_CHARS shift]} ) ) ) (= scope= flags=0 words=[] bindings=[('FIELDS', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('PRINTF', {[DQ ]})]) (While (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xfrom]]} {[LIT_DBRACKET_LIKE "]"]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[SQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS shift]} ) (Com {[LIT_CHARS set]} {[LIT_CHARS X]} {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[VarSub TABLE] [LIT_OTHER "@"]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [\ LIT_ESCAPED_CHAR "\\\t"]} {[LIT_CHARS -f1]}) )]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS shift]} ) ) (ElseTrue) (List (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub 1]]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS do_aggreg]} {[DQ [VarSub @]]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('INAGG', {[DQ [LIT_CHARS Y]]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 3]} ) ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad field name ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub FIELDS]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('FIELDS', {[DQ [VarSub FIELDS][LIT_CHARS ","]]})]) ) (= scope= flags=0 words=[] bindings=[('FIELDS', {[DQ [VarSub FIELDS][LIT_CHARS " "][VarSub OUTFIELD]]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub SUBSELECT]]} {[LIT_DBRACKET_LIKE "="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub PRINTF]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('PRINTF', {[DQ [LIT_CHARS "|"]]})]) ) (= scope= flags=0 words=[] bindings=[('WIDTH', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub RESULT]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (= scope= flags=0 words=[] bindings=[('PRINTF', {[DQ [VarSub PRINTF][LIT_CHARS "%-"][VarSub WIDTH][LIT_CHARS .][VarSub WIDTH][LIT_CHARS "s|"]]})]) ) (ElseTrue) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub AGGREGATE]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('PRINTF', {[DQ [VarSub PRINTF][\ LIT_ESCAPED_CHAR "\\\\"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "%s"][\ LIT_ESCAPED_CHAR "\\\\"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " "]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('PRINTF', {[DQ [VarSub PRINTF][LIT_CHARS "%s"][\ LIT_ESCAPED_CHAR "\\n"]]})]) ) ) (Com {[LIT_CHARS shift]} ) ) ) ) (Com {[LIT_CHARS shift]} {[LIT_CHARS 2]} ) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('SORT', {[DQ ]})]) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xwhere]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS where]} {[DQ [VarSub @]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [VarSub WHERE][LIT_CHARS " || NR == 1"]]})]) (Com {[LIT_CHARS shift]} ) ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xorder]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 2]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xby]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Syntax error ("][VarSub 2][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS syntax]} {[LIT_CHARS select]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) (Com {[LIT_CHARS shift]} {[LIT_CHARS 2]} ) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_CHARS -a]} {[DQ [VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS union]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xasc]]} {[LIT_CHARS -a]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xdesc]]} {[LIT_CHARS -a]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS Xnum]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS lookup_field]} {[DQ [VarSub 1]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub ?]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Bad field name ("][VarSub 1][LIT_CHARS ")"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub SORT]]} {[LIT_DBRACKET_LIKE "="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('SORT', {[DQ [LIT_CHARS "sort -t"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "\t"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " "]]})]) ) (= scope= flags=0 words=[] bindings=[('SORTL', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[VarSub OUTFIELDNUM]} {[LIT_CHARS -]} {[LIT_CHARS 1]})]]})]) (= scope= flags=0 words=[] bindings=[('SORT', {[DQ [VarSub SORT][LIT_CHARS " +"][VarSub SORTL]]})]) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xnum]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('SORT', {[DQ [VarSub SORT][LIT_CHARS n]]})]) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 2]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xdesc]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('SORT', {[DQ [VarSub SORT][LIT_CHARS r]]})]) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 3]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xdesc]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('SORT', {[DQ [VarSub SORT][LIT_CHARS r]]})]) ) (= scope= flags=0 words=[] bindings=[('SORT', {[DQ [VarSub SORT][LIT_CHARS " -"][VarSub OUTFIELDNUM]]})]) ) ) (Com {[LIT_CHARS shift]} ) ) ) ) (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [LIT_CHARS X][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Xunion]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('UNION', {[DQ [LIT_CHARS Y]]})]) (Com {[LIT_CHARS break]} ) ) (ElseTrue) (Com {[LIT_CHARS shift]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub INAGG]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('WHERE', {[DQ [LIT_CHARS "NR == 1"]]})]) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub DISTINCT]]} {[LIT_NEQUAL "!="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub SORT]]} {[LIT_DBRACKET_LIKE "="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('DIST', {[DQ [LIT_CHARS "sort | uniq | tee /tmp/"][VarSub $][LIT_CHARS row]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('DIST', {[DQ [LIT_CHARS "uniq | tee /tmp/"][VarSub $][LIT_CHARS row]]})]) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('DIST', {[DQ [LIT_CHARS cat]]})]) ) (= scope= flags=0 words=[] bindings=[('TABLEFILE', {[DQ [VarSub TABLE][LIT_CHARS "~"]]})]) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub SORT]]} {[LIT_NEQUAL "!="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Pipeline (Com {[LIT_CHARS cat]} {[VarSub TABLE] [LIT_TILDE "~"]} ) (Com {[LIT_CHARS eval]} {[DQ [VarSub SORT]]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $]} "> 1), > ) ) (= scope= flags=0 words=[] bindings=[('TABLEFILE', {[DQ [LIT_CHARS /tmp/][VarSub $]]})]) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub SUBSELECT]]} {[LIT_DBRACKET_LIKE "]"]} ) (Pipeline (Com {[VarSub AWK]} {[LIT_CHARS -F] [DQ [LIT_CHARS "\t"]]} {[DQ [VarSub WHERE][LIT_CHARS " {printf "][\ LIT_ESCAPED_CHAR "\\\""][VarSub PRINTF][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ", "][VarSub FIELDS][LIT_CHARS " }"]]} {[VarSub TABLEFILE]} ) (Com {[LIT_CHARS eval]} {[DQ [VarSub DIST]]} ) ) (ElseTrue) (AndOr OP_AND_IF (Pipeline (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub QUIET]]} {[LIT_CHARS -o]} {[DQ [VarSub INAGG]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Y]]} {[LIT_DBRACKET_LIKE "]"]} ) (Subshell (List (Com {[LIT_CHARS set]} {[LIT_CHARS X]} {[ComSub (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [\ LIT_ESCAPED_CHAR "\\\t"]} {[LIT_CHARS -f1]} {[VarSub TABLE] [LIT_OTHER "@"]})]} ) (Com {[LIT_CHARS shift]} ) (Com {[LIT_CHARS echo]} {[VarSub NOCR1]} {[DQ [LIT_CHARS -][VarSub 1][LIT_CHARS -][VarSub NOCR2]]} ) (Com {[LIT_CHARS shift]} ) (For HEADING do_arg_iter) (Com {[LIT_CHARS echo]} {[VarSub NOCR1]} {[DQ [VarSub TAB][LIT_CHARS -][VarSub HEADING][LIT_CHARS -][VarSub NOCR2]]} ) ) (Com {[LIT_CHARS echo]} {[DQ ]} ) ) ) ) (Com {[VarSub AWK]} {[LIT_CHARS -F] [DQ [LIT_CHARS "\t"]]} {[DQ [VarSub WHERE][LIT_CHARS " { cnt += 1 ; printf "][\ LIT_ESCAPED_CHAR "\\\""][VarSub PRINTF][\ LIT_ESCAPED_CHAR "\\\\"][LIT_CHARS n][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ", "][VarSub FIELDS][LIT_CHARS " }\n"][LIT_CHARS "\t\t\tEND\t{ printf "][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "( %1d rows)"][\ LIT_ESCAPED_CHAR "\\\\"][LIT_CHARS n][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ", (cnt - 1) "][LIT_CHARS "\t\t\t>"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS /tmp/][VarSub $][LIT_CHARS row][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " }"]]} {[LIT_CHARS -]} {[VarSub TABLEFILE]} ) (Com {[LIT_CHARS eval]} {[DQ [VarSub DIST]]} ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub DISTINCT]]} {[LIT_DBRACKET_LIKE "="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS cat]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS row]} ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('X', {[ComSub (Pipeline (Com {[LIT_CHARS expr]} {[\ LIT_ESCAPED_CHAR "\\`"] [LIT_CHARS cat]} {[LIT_CHARS /tmp/] [VarSub $] [LIT_CHARS row]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l] [\ LIT_ESCAPED_CHAR "\\`"]} {[LIT_CHARS -]} {[LIT_CHARS 1]}) )]})]) (Com {[LIT_CHARS echo]} {[SQ ] [VarSub X] [SQ ]} ) ) ) ) ) ) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) ) (While (Com {[LIT_OTHER ":"]} ) (List (While (Com {[LIT_OTHER ":"]} ) (List (Com {[LIT_CHARS echo]} {[VarSub NOCR1]} {[DQ [LIT_CHARS "* "][VarSub NOCR2]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS read]} {[LIT_CHARS LINE]} ) (Com {[LIT_CHARS exit]} ) ) (= scope= flags=0 words=[] bindings=[('SQLPART', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub LINE]]} {[LIT_OTHER ":"]} {[SQ ]})]]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub SQLPART]]} {[LIT_NEQUAL "!="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub NEW]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Y]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ ]})]) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub LINE]]} {[LIT_OTHER ":"]} {[SQ ]})]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ [VarSub _CMD]] [ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub LINE]]} {[LIT_OTHER ":"]} {[SQ ]})] [DQ [VarSub NL]]})]) (= scope= flags=0 words=[] bindings=[('LINE', {[DQ [LIT_CHARS /p/g]]})]) (= scope= flags=0 words=[] bindings=[('NEW', {[DQ ]})]) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ [VarSub _CMD]] [DQ [VarSub SQLPART]] [DQ [VarSub NL]]})]) (= scope= flags=0 words=[] bindings=[('LINE', {[DQ [ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub LINE]]} {[LIT_OTHER ":"]} {[SQ ]})]]})]) (= scope= flags=0 words=[] bindings=[('NEW', {[DQ ]})]) ) ) ) ) (Case to_match={[DQ [VarSub LINE]]}, pat_word_list=[[{[LIT_CHARS /p]}, {[LIT_CHARS p]}], [{[LIT_CHARS /g]}, {[LIT_CHARS g]}], [{[LIT_CHARS /p/g]}, {[LIT_CHARS pg]}], [{[LIT_CHARS /r]}, {[LIT_CHARS r]}], [{[LIT_CHARS /s]}, {[LIT_CHARS s]}], [{[LIT_CHARS /e]}, {[LIT_CHARS e]}], [{[LIT_CHARS /i]}, {[LIT_CHARS i]}], [{[LIT_CHARS /w]}, {[LIT_CHARS w]}], [{[LIT_CHARS /q]}, {[LIT_CHARS q]}], [{[\ LIT_ESCAPED_CHAR "\\#"] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS echo]} {[DQ [VarSub _CMD]]} ) (Com {[LIT_CHARS break]} ) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub _CMD]]} ) (Com {[LIT_CHARS break]} ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS reset]]} ) (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ ]})]) ) (List (Com {[LIT_CHARS umask]} {[VarSub UMASK]} ) (Com {[VarSub SHELL]} ) (Com {[LIT_CHARS umask]} {[LIT_CHARS 0000]} ) ) (List (Com {[LIT_CHARS umask]} {[VarSub UMASK]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub _CMD]]} < (FilenameRedirectNode filename={[LIT_CHARS /tmp/] [VarSub $]} "> 1), > ) (Com {[VarSub EDITOR]} {[LIT_CHARS /tmp/] [VarSub $]} ) (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ [ComSub (Com {[LIT_CHARS cat]} {[LIT_CHARS /tmp/] [VarSub $]})]]})]) (Com {[LIT_CHARS umask]} {[LIT_CHARS 0000]} ) ) (List (Com {[LIT_CHARS echo]} {[VarSub NOCR1]} {[DQ [LIT_CHARS "Enter include file: "][VarSub NOCR2]]} ) (Com {[LIT_CHARS read]} {[LIT_CHARS LINE]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -f]} {[DQ [VarSub LINE]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ [VarSub _CMD][ComSub (Com {[LIT_CHARS cat]} {[VarSub LINE]})][VarSub NL]]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub LINE][LIT_CHARS " included"]]} ) ) ) ) (List (Com {[LIT_CHARS echo]} {[VarSub NOCR1]} {[DQ [LIT_CHARS "Enter output file: "][VarSub NOCR2]]} ) (Com {[LIT_CHARS read]} {[LIT_CHARS LINE]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub LINE]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS umask]} {[VarSub UMASK]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [VarSub _CMD]]} < (FilenameRedirectNode filename={[DQ [VarSub LINE]]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS umask]} {[LIT_CHARS 0000]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub LINE][LIT_CHARS " written"]]} ) ) ) ) ) ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub NEW]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Y]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ ]})]) ) (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub NEW]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS Y]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ ]})]) ) (= scope= flags=0 words=[] bindings=[('_CMD', {[DQ [VarSub _CMD][VarSub LINE][VarSub NL]]})]) ) ) (= scope= flags=0 words=[] bindings=[('NEW', {[DQ ]})]) ) ) (= scope= flags=0 words=[] bindings=[('CMD', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub _CMD]]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS s/][\ LIT_ESCAPED_CHAR "\\'"][LIT_CHARS /][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS /g]]} {[LIT_CHARS -e]} {[SQ ]} {[LIT_CHARS -e]} {[SQ !=][<>!=]*\\)/ \\1 /g">]} {[LIT_CHARS -e]} {[SQ ]} {[LIT_CHARS -e]} {[SQ /\\\\\\>/g">]} {[LIT_CHARS -e]} {[SQ ]} {[LIT_CHARS -e]} {[SQ ]} {[LIT_CHARS -e]} {[SQ ]}) )]})]) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub CMD]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS continue]} ) ) (= scope= flags=0 words=[] bindings=[('IFS', {[DQ [VarSub _IFS][LIT_CHARS ","]]})]) (Com {[LIT_CHARS eval]} {[LIT_CHARS set]} {[LIT_CHARS X]} {[VarSub CMD]} ) (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('IFS', {[DQ [VarSub _IFS]]})]) (= scope= flags=0 words=[] bindings=[('NEW', {[DQ [LIT_CHARS Y]]})]) (Case to_match={[VarSub 1]}, pat_word_list=[[{[LIT_CHARS select]}], [{[LIT_CHARS create]}], [{[LIT_CHARS delete]}], [{[LIT_CHARS drop]}], [{[LIT_CHARS insert]}], [{[LIT_CHARS update]}], [{[LIT_CHARS edit]}], [{[LIT_CHARS help]}], [{[LIT_CHARS print]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS select_]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS create]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS delete]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS drop]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS insert]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS update]} {[DQ [VarSub @]]} ) (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 2]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[VarSub EDITOR]} {[VarSub 2] [LIT_OTHER "@"]} ) ) (Com {[LIT_CHARS help]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS select_]} {[DQ [LIT_CHARS select]]} {[SQ ]} {[DQ [LIT_CHARS from]]} {[DQ [VarSub 2]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Missing or unrecognized command."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) ) ) ) )