Create an XA data source type

You must create an XA data source type, before you create an XA data source.

To create an XA data source type, use the CREATE XADATASOURCE TYPE statement, as follows:
CREATE XADATASOURCE TYPE datasourcetypename (purpose options);
For example, in your code, you can specify information as shown in the following example:
create function "informix".mqseries_open(lvarchar(256), int, int) returns int;
       external name '$USERFUNCDIR/mqseries.udr(mqseries_open)' language c;

grant execute on function "informix".mqseries_open(lvarchar(256), int, int) 
       to public;

create function "informix".mqseries_close(lvarchar(256), int, int) returns int;
       external name '$USERFUNCDIR/mqseries.udr(mqseries_close)' language c;

grant execute on function "informix".mqseries_close(lvarchar(256), int, int) 
       to public;

create function "informix".mqseries_start(informix.pointer, int, int) returns int;
       external name '$USERFUNCDIR/mqseries.udr(mqseries_start)' language c;

grant execute on function "informix".mqseries_start(informix.pointer, int, int) 
       to public;

create function "informix".mqseries_end(informix.pointer, int, int) returns int;
        external name '$USERFUNCDIR/mqseries.udr(mqseries_end)' language c;

grant execute on function "informix".mqseries_end(informix.pointer, int, int) 
        to public;

create function "informix".mqseries_rollback(informix.pointer, int, int) 
        returns int;
         external name '$USERFUNCDIR/mqseries.udr(mqseries_rollback)' language c;
grant execute on function "informix".mqseries_rollback(informix.pointer, int, int)
        to public;

create function "informix".mqseries_prepare(informix.pointer, int, int) returns int;
         external name '$USERFUNCDIR/mqseries.udr(mqseries_prepare)' language c;

grant execute on function "informix".mqseries_prepare(informix.pointer, int, int) 
        to public;

create function "informix".mqseries_commit(informix.pointer, int, int) returns int;
         external name '$USERFUNCDIR/mqseries.udr(mqseries_commit)' language c;

grant execute on function "informix".mqseries_commit(informix.pointer, int, int) 
        to public;

create function "informix".mqseries_forget(informix.pointer, int, int) returns int;
         external name '$USERFUNCDIR/mqseries.udr(mqseries_forget)' language c;

grant execute on function "informix".mqseries_forget(informix.pointer, int, int) 
        to public;

create function "informix".mqseries_recover(informix.pointer, int, int, int) 
        returns int;
         external name '$USERFUNCDIR/mqseries.udr(mqseries_recover)' language c;

grant execute on function "informix".mqseries_recover(informix.pointer, int, int,
        int) to public;

create function "informix".mqseries_complete(informix.pointer, informix.pointer,
        int, int) returns int;
         external name '$USERFUNCDIR/mqseries.udr(mqseries_complete)' language c;

grant execute on function "informix".mqseries_complete(informix.pointer,
        informix.pointer int, int) to public;

CREATE XADATASOURCE TYPE informix.MQSeries
(xa_flags = 1,
xa_version   = 0,
xa_open     = informix.mqseries_open,
xa_close    = informix.mqseries_close,
xa_start    = informix.mqseries_start,
xa_end      = informix.mqseries_end,
xa_rollback = informix.mqseries_rollback,
xa_prepare  = informix.mqseries_prepare,
xa_commit   = informix.mqseries_commit,
xa_recover  = informix.mqseries_recover,
xa_forget   = informix.mqseries_forget,
xa_complete = informix.mqseries_complete);

In this statement, xa_flags must be set to 1.

You must provide one value for each of the options listed above, but not necessarily in the sequence shown above.

ANSI database and non-ANSI database namespace rules apply for the XA data source type, XA data source names, and user-defined function names.

After you create a data source type, information about the data source type is stored in the sysxasourcetypes system catalog table.

For syntax details, see the Informix® Guide to SQL: Syntax.