Should it be possible to run MAL programs manually, by reading them from a file? I just tried a simple experiment and got an error message. The experiment: I created a table, "test," with two columns, "field1" and field2." I created a MAL query by issuing the SQL query, "EXPLAIN SELECT * FROM test;" and cut and pasted the output to a file. I then stripped out all of the formatting characters ('|') and extraneous spaces. I then re-entered mclient, choosing the MAL language, and read in the MAL form of the query with "\< junk.mal." The interpreter then complained that two identifiers were not initialized (see output, below). So, is it not possible to issue a MAL query by hand? Or am I missing something? (Again, please forgive me, I am new to MonetDB.) Thanks, Steve Morgan mal>\< junk.mal MAPI = (monetdb) /tmp/.s.monetdb.50000 QUERY = function user.s1_1{autoCommit=true}():void; barrier X_41 := language.dataflow(); X_2 := sql.mvc(); X_3:bat[:oid,:oid] := sql.tid(X_2,"sys","test"); X_6 := sql.bind(X_2,"sys","test","field1",0); (X_9,r1_9) := sql.bind(X_2,"sys","test","field1",2); X_12 := sql.bind(X_2,"sys","test","field1",1); X_14 := sql.delta(X_6,X_9,r1_9,X_12); X_15 := algebra.leftfetchjoin(X_3,X_14); X_16 := sql.bind(X_2,"sys","test","field2",0); (X_18,r1_22) := sql.bind(X_2,"sys","test","field2",2); X_20 := sql.bind(X_2,"sys","test","field2",1); X_21 := sql.delta(X_16,X_18,r1_22,X_20); X_22 := algebra.leftfetchjoin(X_3,X_21); language.pass(X_3); exit X_41; X_23 := sql.resultSet(2,1,X_15); sql.rsColumn(X_23,"sys.test","field1","int",32,0,X_15); sql.rsColumn(X_23,"sys.test","field2","int",32,0,X_22); X_29 := io.stdout(); sql.exportResult(X_29,X_23); end s1_1; ERROR = !TypeException:user.s1_1[16]:'X_15' may not be used before being initialized !TypeException:user.s1_1[17]:'X_15' may not be used before being initialized !TypeException:user.s1_1[18]:'X_22' may not be used before being initialized
I can answer my own question here. First, apparently we have to run
"sql.init();" before running the MAL program iff it includes "sql.mvc();"
Second, there is something wrong with the code generator--it is not generating
initialization steps for X_15 and X_22. When I added these, the function ran
correctly. Thus, before the barrier statement, I needed to add the lines,
X_15 := nil:bat[:oid,:int];
X_22 := nil:bat[:oid,:int];
Steve Morgan
________________________________
From: Stephen P. Morgan
participants (1)
-
Stephen P. Morgan