(List (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_z {[DQ [VarSub BALLS_DB_CREDENTIALS]]}}) (= scope= flags=0 words=[] bindings=[('BALLS_DB_CREDENTIALS', {[SQ ]})]) ) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_z {[DQ [VarSub BALLS_DB]]}}) (= scope= flags=0 words=[] bindings=[('BALLS_DB', {[SQ ]})]) ) (FunctionDef balls::model::impl [] (List (= scope= flags=0 words=[] bindings=[('model', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('mode', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (If (Com {[LIT_CHARS exists]} {[DQ [VarSub model][LIT_CHARS .][VarSub mode]]}) (Com {[DQ [VarSub model][LIT_CHARS .][VarSub mode]]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS exists]} {[DQ [VarSub model][LIT_CHARS "::"][VarSub mode]]}) (While (Com {[LIT_CHARS read]} {[LIT_CHARS line]}) (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.with]} {[DQ [VarSub line]]} {[DQ [VarSub model][LIT_CHARS "::"][VarSub mode]]}) ) (Pipeline (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.fields]}) (Com {[LIT_CHARS matches]} {[DQ [LIT_CHARS "^"][VarSub mode][\ LIT_ESCAPED_CHAR "\\$"]]}) ) (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.field]} {[DQ [VarSub mode]]}) (Com {[LIT_CHARS exists]} {[DQ [LIT_CHARS "balls::model."][VarSub mode]]}) (Com {[DQ [LIT_CHARS "balls::model."][VarSub mode]]} {[DQ [VarSub @]]}) (ElseTrue) (Com {[LIT_CHARS stderr]} {[DQ [LIT_CHARS "oh no! couldn't find "][\ LIT_ESCAPED_CHAR "\\`"][VarSub model][LIT_CHARS .][VarSub mode][\ LIT_ESCAPED_CHAR "\\`"][LIT_CHARS .]]}) ) ) ) (FunctionDef balls::model.with [] (List (= scope= flags=0 words=[] bindings=[('__data', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('__callback', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (For __field [{[ComSub (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.fields]})]}]) (List (= scope= flags=0 words=[{[DQ [VarSub __field]] [LIT_OTHER "="] [DQ [ComSub (Com redirects=[(HereWordRedirectNode here_word={[DQ [VarSub __data][\ LIT_ESCAPED_CHAR "\\n"]]} 0)]{[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.field]} {[DQ [VarSub __field]]})]]}] bindings=[]) (= scope= flags=0 words=[{[DQ [VarSub __field]] [LIT_OTHER "="] [DQ [ComSub (Com redirects=[(HereWordRedirectNode here_word={[DQ [VarSub __data][\ LIT_ESCAPED_CHAR "\\n"]]} 0)]{[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.field]} {[DQ [VarSub __field]]})]]}] bindings=[]) ) ) (Com {[DQ [VarSub __callback]]} {[DQ [VarSub @]]}) ) ) (FunctionDef balls::model [] (List (Com {[LIT_CHARS alias]} {[DQ [VarSub 1]] [LIT_OTHER "="] [DQ [LIT_CHARS "balls::model::impl "][VarSub 1]]}) (= scope= flags=0 words=[] bindings=[('BALLS_LAST_MODEL', {[DQ [VarSub 1]]})]) ) ) (FunctionDef balls::model.find [] (List (= scope= flags=0 words=[] bindings=[('query', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (For param [{[DQ [VarSub @]]}]) (List (Com {[LIT_CHARS db_safe]} {[LIT_CHARS param]}) (= scope= flags=0 words=[] bindings=[('query', {[DQ [VarSub query transform_ops=[PatSub {[\ LIT_ESCAPED_CHAR "\\?"]} {[VarSub param]}]]]})]) ) ) (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.execute]} {[DQ [LIT_CHARS "SELECT * from "][ComSub (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.table_name]})][LIT_CHARS " WHERE "][VarSub query]]}) ) ) (FunctionDef balls::model.fetch_fields [] (Pipeline (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.execute]} {[DQ [LIT_CHARS "SHOW COLUMNS IN "][ComSub (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.table_name]})]]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f1]}) ) ) (FunctionDef balls::model.fields [] (List (= scope= flags=0 words=[] bindings=[('fields_var', {[DQ [VarSub model]] [LIT_CHARS _FIELDS]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub fields_var transform_ops=[(!ref)]]]}) ) ) (FunctionDef balls::model.field_map [] (Pipeline (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.fields]}) (Com {[LIT_CHARS nl]} {[LIT_CHARS -nrz]} {[LIT_CHARS -ba]}) ) ) (FunctionDef balls::model.column_number_for [] (List (= scope= flags=0 words=[] bindings=[('field', {[DQ [VarSub 1]]})]) (Pipeline (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.field_map]}) (Com {[LIT_CHARS grep]} {[DQ [VarSub field][\ LIT_ESCAPED_CHAR "\\$"]]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f1]}) ) ) ) (FunctionDef balls::model.field_at [] (List (= scope= flags=0 words=[] bindings=[('idx', {[DQ [VarSub 1]]})]) (Pipeline (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.field_map]}) (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS "^0*"][VarSub idx]]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f2-]}) ) ) ) (FunctionDef balls::model.field [] (List (= scope= flags=0 words=[] bindings=[('idx', {[DQ [ComSub (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model.column_number_for]} {[DQ [VarSub 1]]})]]})]) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f] [DQ [VarSub idx]]}) ) ) (FunctionDef balls::model.table_name [] (List (= scope= flags=0 words=[] bindings=[('table_name_var', {[DQ [VarSub model][LIT_CHARS _table_name]]})]) (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub 1]]}}) (= scope= flags=1 words=[{[DQ [VarSub table_name_var]] [LIT_OTHER "="] [DQ [VarSub 1]]}] bindings=[]) (DBracket {B1 UNARY_STRING_n {[DQ [VarSub table_name_var transform_ops=[(!ref)]]]}}) (Com {[LIT_CHARS echo]} {[DQ [VarSub table_name_var transform_ops=[(!ref)]]]}) (ElseTrue) (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub model]]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) ) ) ) ) (FunctionDef balls::model.execute [] (Pipeline (Com {[LIT_CHARS mysql]} {[VarSub BALLS_DB_CREDENTIALS]} {[DQ [VarSub BALLS_DB]]} {[LIT_CHARS -e]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS tail]} {[LIT_CHARS -n] [LIT_OTHER "+"] [LIT_CHARS 2]}) (Com {[LIT_CHARS sed]} {[SQ ]}) ) ) (FunctionDef balls::model::load [] (List (= scope= flags=0 words=[] bindings=[('file', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS .]} {[DQ [VarSub file]]}) (= scope= flags=0 words=[] bindings=[('model_name', {[DQ [VarSub BALLS_LAST_MODEL]]})]) (= scope= flags=0 words=[] bindings=[('fields_var', {[DQ [VarSub model_name]] [LIT_CHARS _FIELDS]})]) (= scope= flags=1 words=[{[DQ [VarSub fields_var]] [LIT_OTHER "="] [DQ [ComSub (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS model] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS impl]} {[DQ [VarSub model_name]]} {[LIT_CHARS fetch_fields]})]]}] bindings=[]) ) ) )