| Thread overview | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
August 29, 2008 DDBI and MySQL | ||||
|---|---|---|---|---|
| ||||
Attachments:
| I've been working to attempt to get DDBI to work with MySQL. Unfortunately I'm stuck with the Windows platform for lack of the impetus and know-how to get the compiler working elsewhere. I use a slightly modified version of DDBI to get SQLite to work. I don't think that would disrupt the workings of MySQL. Once I found the correct library file to use (buried in a large download of MySQL - the server, which was annoying) I found that the whole she-bang didn't work at all. It was all tied to a strange external declaration in imp_win.d, which apparently decided that on Windows the MySQL support is provided by extern(Windows) instead of extern(C). Once I got that cleared up, I started a bunch of "cannot implicitly cast foo* to foo*" errors, which mystified me. I think it's because one is tossing an alias of something to something that's expecting the un-aliased something, and so it's having some issues. So attempting to fix the issues didn't work terribly well. I beat through a few pointer issues to get hung up on a weird pointer issue which emits this error: dbi\mysql\MysqlDatabase.d(194): constructor dbi.mysql.MysqlResult.MysqlResult.th is (st_mysql_res*) does not match parameter types (st_mysql_res*) dbi\mysql\MysqlDatabase.d(194): Error: cannot implicitly convert expression (cas t(st_mysql_res*)*results) of type st_mysql_res* to st_mysql_res* I'm pretty puzzled. I've tried casting it explicitly, and it doesn't work. I'd really appreciate it if someone knew what is going on. When I explicitly cast it, it still give the same error. This is DMD version 1.033. | |||
August 29, 2008 Re: DDBI and MySQL | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Chris R. Miller | Chris R. Miller wrote: > I've been working to attempt to get DDBI to work with MySQL. > Unfortunately I'm stuck with the Windows platform for lack of the > impetus and know-how to get the compiler working elsewhere. > > I use a slightly modified version of DDBI to get SQLite to work. I > don't think that would disrupt the workings of MySQL. > > Once I found the correct library file to use (buried in a large download > of MySQL - the server, which was annoying) I found that the whole > she-bang didn't work at all. It was all tied to a strange external > declaration in imp_win.d, which apparently decided that on Windows the > MySQL support is provided by extern(Windows) instead of extern(C). I hope you changed that to extern(System) ? It sounds like an old MySQL file. > > Once I got that cleared up, I started a bunch of "cannot implicitly cast > foo* to foo*" errors, which mystified me. I think it's because one is > tossing an alias of something to something that's expecting the > un-aliased something, and so it's having some issues. > > So attempting to fix the issues didn't work terribly well. I beat > through a few pointer issues to get hung up on a weird pointer issue > which emits this error: > > dbi\mysql\MysqlDatabase.d(194): constructor > dbi.mysql.MysqlResult.MysqlResult.th > is (st_mysql_res*) does not match parameter types (st_mysql_res*) > dbi\mysql\MysqlDatabase.d(194): Error: cannot implicitly convert > expression (cas > t(st_mysql_res*)*results) of type st_mysql_res* to st_mysql_res* > > I'm pretty puzzled. I've tried casting it explicitly, and it doesn't > work. I'd really appreciate it if someone knew what is going on. When > I explicitly cast it, it still give the same error. > > This is DMD version 1.033. > | |||
August 29, 2008 Re: DDBI and MySQL | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Don Attachments:
| Don wrote:
> Chris R. Miller wrote:
>> I've been working to attempt to get DDBI to work with MySQL. Unfortunately I'm stuck with the Windows platform for lack of the impetus and know-how to get the compiler working elsewhere.
>>
>> I use a slightly modified version of DDBI to get SQLite to work. I don't think that would disrupt the workings of MySQL.
>>
>> Once I found the correct library file to use (buried in a large download of MySQL - the server, which was annoying) I found that the whole she-bang didn't work at all. It was all tied to a strange external declaration in imp_win.d, which apparently decided that on Windows the MySQL support is provided by extern(Windows) instead of extern(C).
>
> I hope you changed that to extern(System) ? It sounds like an old MySQL
> file.
No, it all links properly with extern(C).
| |||
August 29, 2008 Re: DDBI and MySQL | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Chris R. Miller | On Fri, 29 Aug 2008 01:07:35 -0700, "Chris R. Miller" <lordSaurontheGreat@gmail.com> wrote: >Don wrote: >> Chris R. Miller wrote: >>> I've been working to attempt to get DDBI to work with MySQL. Unfortunately I'm stuck with the Windows platform for lack of the impetus and know-how to get the compiler working elsewhere. >>> >>> I use a slightly modified version of DDBI to get SQLite to work. I don't think that would disrupt the workings of MySQL. >>> >>> Once I found the correct library file to use (buried in a large download of MySQL - the server, which was annoying) I found that the whole she-bang didn't work at all. It was all tied to a strange external declaration in imp_win.d, which apparently decided that on Windows the MySQL support is provided by extern(Windows) instead of extern(C). >> >> I hope you changed that to extern(System) ? It sounds like an old MySQL >> file. > >No, it all links properly with extern(C). > MySQL API uses stdcall calling convention on Windows so extern(Windows) in imp_win.d is correct. Here is an import library for libmysql.dll that works for me http://d-coding.com/downloads/libmysql.lib | |||
August 29, 2008 Re: DDBI and MySQL | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Chris R. Miller | On 2008-08-29 09:47:30 +0200, "Chris R. Miller" <lordSaurontheGreat@gmail.com> said: > [...] > Once I got that cleared up, I started a bunch of "cannot implicitly cast > foo* to foo*" errors, which mystified me. I think it's because one is > tossing an alias of something to something that's expecting the > un-aliased something, and so it's having some issues. > > So attempting to fix the issues didn't work terribly well. I beat > through a few pointer issues to get hung up on a weird pointer issue > which emits this error: > > dbi\mysql\MysqlDatabase.d(194): constructor > dbi.mysql.MysqlResult.MysqlResult.th > is (st_mysql_res*) does not match parameter types (st_mysql_res*) > dbi\mysql\MysqlDatabase.d(194): Error: cannot implicitly convert > expression (cas > t(st_mysql_res*)*results) of type st_mysql_res* to st_mysql_res* > > I'm pretty puzzled. I've tried casting it explicitly, and it doesn't > work. I'd really appreciate it if someone knew what is going on. When > I explicitly cast it, it still give the same error. I had a similar error today in my template code with int* and int* (I think also connected with aliases and nesting of templates). I haven't distilled it yet, but using cast(T*)(cast(size_t)a+cast(size_t)b) in my case fixed the issue... Fawzi | |||
August 30, 2008 Re: DDBI and MySQL | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Fawzi Mohamed Attachments:
| Fawzi Mohamed wrote:
> On 2008-08-29 09:47:30 +0200, "Chris R. Miller" <lordSaurontheGreat@gmail.com> said:
>
>> [...]
>> Once I got that cleared up, I started a bunch of "cannot implicitly cast
>> foo* to foo*" errors, which mystified me. I think it's because one is
>> tossing an alias of something to something that's expecting the
>> un-aliased something, and so it's having some issues.
>>
>> So attempting to fix the issues didn't work terribly well. I beat through a few pointer issues to get hung up on a weird pointer issue which emits this error:
>>
>> dbi\mysql\MysqlDatabase.d(194): constructor
>> dbi.mysql.MysqlResult.MysqlResult.th
>> is (st_mysql_res*) does not match parameter types (st_mysql_res*)
>> dbi\mysql\MysqlDatabase.d(194): Error: cannot implicitly convert
>> expression (cas
>> t(st_mysql_res*)*results) of type st_mysql_res* to st_mysql_res*
>>
>> I'm pretty puzzled. I've tried casting it explicitly, and it doesn't work. I'd really appreciate it if someone knew what is going on. When I explicitly cast it, it still give the same error.
>
> I had a similar error today in my template code with int* and int* (I
> think also connected with aliases and nesting of templates).
> I haven't distilled it yet, but using
>
> cast(T*)(cast(size_t)a+cast(size_t)b)
>
> in my case fixed the issue...
>
> Fawzi
Glad it worked for you! I wasn't so lucky.
| |||
August 30, 2008 Re: DDBI and MySQL | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Max Samukha Attachments:
| Max Samukha wrote: > On Fri, 29 Aug 2008 01:07:35 -0700, "Chris R. Miller" <lordSaurontheGreat@gmail.com> wrote: > >> Don wrote: >>> Chris R. Miller wrote: >>>> I've been working to attempt to get DDBI to work with MySQL. Unfortunately I'm stuck with the Windows platform for lack of the impetus and know-how to get the compiler working elsewhere. >>>> >>>> I use a slightly modified version of DDBI to get SQLite to work. I don't think that would disrupt the workings of MySQL. >>>> >>>> Once I found the correct library file to use (buried in a large download of MySQL - the server, which was annoying) I found that the whole she-bang didn't work at all. It was all tied to a strange external declaration in imp_win.d, which apparently decided that on Windows the MySQL support is provided by extern(Windows) instead of extern(C). >>> I hope you changed that to extern(System) ? It sounds like an old MySQL >>> file. >> No, it all links properly with extern(C). >> > > MySQL API uses stdcall calling convention on Windows so extern(Windows) in imp_win.d is correct. Here is an import library for libmysql.dll that works for me http://d-coding.com/downloads/libmysql.lib Changed it back to extern(Windows) and still no joy. I also tried using your supplied library file, but nothing worked, either. As soon as I changed it from extern(C) I was greeted by these errors though: dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_init@4 dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_real_connect@32 dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_errno@4 dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_error@4 dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _D3dbi5mysql10MysqlError17specificToGeneralFkZE3dbi9 ErrorCode9ErrorCode dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_close@4 dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_real_query@12 dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_store_result@4 dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_insert_id@4 dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _mysql_get_client_version@0 dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) Error 42: Symbol Undefined _mysql_fetch_row@4 dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) Error 42: Symbol Undefined _mysql_fetch_lengths@4 dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) Error 42: Symbol Undefined _mysql_free_result@4 dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) Error 42: Symbol Undefined _mysql_num_fields@4 dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) Error 42: Symbol Undefined _mysql_fetch_fields@4 I'm not an expert at all, but I think that's because it can't discover the functions to link against. If I change it back to extern(C) I get this: dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) Error 42: Symbol Undefined _D3dbi5mysql10MysqlError17specificToGeneralFkZE3dbi9 ErrorCode9ErrorCode Which is a regression from what I had when I had changed it to ignore imp_win.d and to use imp.d instead. So I'm thoroughly confused. I suspect that I *almost* had it working with the imp.d save for the cast problems (which could be a compiler bug - if it's not, then there's a lot I'm going to be learning about pointers in my upcoming CS 102 class!) | |||
August 30, 2008 Re: DDBI and MySQL | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Chris R. Miller | On Fri, 29 Aug 2008 20:16:22 -0700, "Chris R. Miller" <lordSaurontheGreat@gmail.com> wrote: >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_init@4 >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_real_connect@32 >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_errno@4 >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_error@4 >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined >_D3dbi5mysql10MysqlError17specificToGeneralFkZE3dbi9 ErrorCode9ErrorCode dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_close@4 >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_real_query@12 >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_store_result@4 >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_insert_id@4 >dsss_objs\D\dbi-mysql-MysqlDatabase.obj(dbi-mysql-MysqlDatabase) > Error 42: Symbol Undefined _mysql_get_client_version@0 >dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) > Error 42: Symbol Undefined _mysql_fetch_row@4 >dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) > Error 42: Symbol Undefined _mysql_fetch_lengths@4 >dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) > Error 42: Symbol Undefined _mysql_free_result@4 >dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) > Error 42: Symbol Undefined _mysql_num_fields@4 >dsss_objs\D\dbi-mysql-MysqlResult.obj(dbi-mysql-MysqlResult) > Error 42: Symbol Undefined _mysql_fetch_fields@4 > All those symbols are exported by the lib I supplied. I guess you are still trying to link against a wrong lib. Check your lib paths. >I'm not an expert at all, but I think that's because it can't discover >the functions to link against. If I change it back to extern(C) I get this: > Even if you manage to link using extern(C), your program won't work correctly, because C and Windows calling conventions differ not only in name decorations. So you must use either extern(Windows) or extern(System). | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply