But how to pass the cell to the C function in order to convert it to
character array for my function? I fixed that and now receive :
sql> select BitAnd(101231231, 10000000);
TypeException:user.s4_1[6]:'udf.bitand' undefined in: X_13:dbl :=
udf.bitand(X_6:str,X_12:str);
program contains errors
I am new to C and no idea how I can fix this error.
On Tue, Mar 22, 2016 at 5:36 PM, Stefan Manegold
the '[]' in " create function BitAnd(Cell1[] char, Cell2[] char) returns float external name udf.BitAnd; " are not valid SQL syntax.
----- On Mar 22, 2016, at 5:20 PM, Shmagi Kavtaradze kavtaradze.s@gmail.com wrote:
Thanks for answer. I used:
command BitAnd(Cell1:str,Cell2:str):flt address UDFBitAnd comment "Compare bag of words";
and it did not give me any errors, but when I launch monetdb "mclient -u monetdb -d voc", I get this error:
ParseException:SQLparser:!42000!syntax error, unexpected '[' in: "-- This Source Code Form is subject to the terms of the Mozilla Public -- Licens"
I looked into license.txt and README, but there are no "[" there. Any ideas?
On Tue, Mar 22, 2016 at 5:08 PM, Stefan Manegold < Stefan.Manegold@cwi.nl > wrote:
As the error message says, instead of "chr", the MAL parser expects a valid MAL type.
As opposed to the (wrong) documentation at https://monetdb.org/Documentation/Manuals/MonetDB/MAL/Types , MAL (and all of MonetDB for that matter) does not support any "chr" (or single-byte single-character) type.
See also (new) bug report #3959: https://www.monetdb.org/bugzilla/show_bug.cgi?id=3959
SQL type "CHAR[ACTER] '(' length ')'" (just like SQL types "VARCHAR '(' length ')' | CHARACTER VARYING '(' length ')'" and "TEXT | STRING | CLOB | CHARACTER LARGE OBJECT") all map to MAL type ":str", which in turn maps to (MonetDB) C type "str", which in turn is defined as "char *".
Hope this helps.
Stefan
----- On Mar 22, 2016, at 4:50 PM, Shmagi Kavtaradze kavtaradze.s@gmail.com wrote:
I am trying to write a C User Defined Function. It works in Neatbeans. What I want is, to take value from cells, insert them in text or char array and compare each corresponding array position to each other. As values I will have "1"s and "0s". E.g "101010100011". THe code I wrote in udf.c:
/* Comparing bag of words */
char BitAnd(char Cell1[], char Cell2[]) { Cell1[10000]; Cell2[10000]; int counter; float result; int strlen = sizeof(Cell1)/sizeof(Cell1[0])-1; int i; for (i=0; i < strlen; i++) { if (Cell1[i] == Cell2[i]) { counter++; } }
result = (float)counter / strlen;
}
/* MAL wrapper */ char UDFBitAnd(char Cell1[], char Cell2[]) { /* assert calling sanity */ assert(Cell1[] != NULL && Cell2[] != NULL); return MAL_SUCCEED;
}
In udf.mal I have:
command BitAnd(Cell1:chr,Cell2:chr):flt address UDFBitAnd comment "Compare bag of words";
In 80_udf.sql:
-- Comparing bag of words create function BitAnd(Cell1[] char, Cell2[] char) returns float external name udf.BitAnd;
I compiled Monetdb, but when I try to connect with "monetdb" to db it gives me error. In the log file I found:
MSG voc[18857]: !SyntaxException:parseError:command BitAnd(Cell1:chr,Cell2:chr):flt MSG voc[18857]: !SyntaxException:parseError: ^Type identifier expected MSG voc[18857]: !SyntaxException:parseError:command BitAnd(Cell1:chr,Cell2:chr):flt MSG voc[18857]: !SyntaxException:parseError: ^',' expected MSG merovingian[8780]: database 'voc' (18857) has exited with exit status 0 MSG merovingian[8780]: database 'voc' has shut down ERR merovingian[8780]: client error: database 'voc' started up, but failed to open up a communication channel
_______________________________________________ users-list mailing list users-list@monetdb.org https://www.monetdb.org/mailman/listinfo/users-list
-- | Stefan.Manegold@CWI.nl | DB Architectures (DA) | | www.CWI.nl/~manegold/ | Science Park 123 (L321) | | +31 (0)20 592-4212 | 1098 XG Amsterdam (NL) | _______________________________________________ users-list mailing list users-list@monetdb.org https://www.monetdb.org/mailman/listinfo/users-list
_______________________________________________ users-list mailing list users-list@monetdb.org https://www.monetdb.org/mailman/listinfo/users-list
-- | Stefan.Manegold@CWI.nl | DB Architectures (DA) | | www.CWI.nl/~manegold/ | Science Park 123 (L321) | | +31 (0)20 592-4212 | 1098 XG Amsterdam (NL) | _______________________________________________ users-list mailing list users-list@monetdb.org https://www.monetdb.org/mailman/listinfo/users-list