Please read error messages carefully and (try to) understand them:
You define a SQL function that return a SQL typ "FLOAT",
which is according to the SQL standard a 64-bit floating point type;
but you (try to) implement that function using a MAL function
that return type :flt, which is defined and implemented as a standard
C type "float", 32-bit which is a 32-bit floating point type.
Hence, your MAL function signature does not match your SQL function signature,
and the SQL parser (correctly) "complains" that there is no matching MAL
function signature for your C function.
SQL types "FLOAT" & "DOUBLE" map to MAL type ":dbl", which is C type "double".
SQL type "REAL" maps to MAL type ":flt", which is C type "float".
Please consider familiarizing yourself with standard C & SQL types using
your favorite sources of respective documentation.
As for the MonetDB type system, please see
https://www.monetdb.org/wiki/MonetDB_type_system
For detailed documentation and examples how to extend MonetDB/SQL with user-defined
functions implemented in C, please see code & documentation at
https://dev.monetdb.org/hg/MonetDB/file/tip/sql/backends/monet5/UDF
https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/UserDefinedFunction
Best,
Stefan
PS: With your approach of representing bits a digits or charaters "0" & "1",
i.e., using a whole byte for each bit, you should not expect to be able to achieve
any performance (or scalability) that matches an implementation that represents
each bit as a bit (e.g., packed into a 1-/2-/4-/8-/16-byte integer type).
----- On Mar 22, 2016, at 5:40 PM, Shmagi Kavtaradze kavtaradze.s@gmail.com wrote:
> 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 < Stefan.Manegold@cwi.nl >
> wrote:
>
>
>
> 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
>
>
> _______________________________________________
> 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