Real-Time Connect Error exceeding column name length

4 posts / 0 new
Last post
Offline
Last seen: 7 years 1 month ago
Joined: 06/10/2014
Posts: 49
Real-Time Connect Error exceeding column name length

Using Real-Time Connect 5.1.0 with a MySQL database, I am using the RTI_REAL_TIME_CONNECT.xml configuration file to create subscriptions. For one table the column name (based on idl identifier) is 42 characters.  I changed the configuration file to use      <idl_member_prefix_max_length>64</idl_member_prefix_max_length> in the <database_mapping_options> but can't get the table created.  I also tried setting <idl_member_suffix_max_length> to 0 and 64.  But have been unable to find a combination that creates the table. 

The actual error from RTC is:
[DDSQLDaemonDynamic_getPrimitiveFieldDcl,line 418:ERROR:50] The column name 'xxxxxx_xxxxxxxxxxxxx$xxxxxx_xxxxxx$xxxxxxx' exceeds the maximum length of 30 characters.

Is there any way to work around this other than creating the table manually?


Thanks,

Anne Fiore

gianpiero's picture
Offline
Last seen: 10 months 1 week ago
Joined: 06/02/2010
Posts: 177

Hello Anne,

I was reading the manual here. By reading Table A.1 I understand that the max length is 30 characters. 

You can use idl_member_prefix_max_length and idl_member_suffix_max_length to compose the name of the colum. For example if the member identifier is 

this_is_a_name_that_is_very_very_long

I think that if you set both parameters to 5, the name of your column will be composed by the frist 5 char of the name, followed by the last 5 char of the member identifier.

Please let me know if that works.

Gianpiero

Offline
Last seen: 7 years 1 month ago
Joined: 06/10/2014
Posts: 49

Hi Gianpiero,

Thank you for looking into this.

I've tried several values for idl_member_prefix_max_length and idl_member_suffix_max_length in the RTIDDS_SUBSCRIPTIONS table for the topic and found if I set the prefix max length = 0 and the suffix max length = 5 then I don't get ERROR 50 (column name exceeds 30 char) but it now reports this error:

RTI Real-Time Connect to MySQL, Release 5.1.0: startup succeeded
[DDSQLDaemonDynamic_createDatabaseTable,line 1833:ERROR:2048] Error creating table 'docbox.NumericMeasContext': [unixODBC][MySQL][ODBC 5.1 Driver][mysqld-5.5.37-0ubuntu0.12.04.1]Can't create table 'docbox.NumericMeasContext' (errno: 139)
[DDSQLDaemonCore_onUpdateMetaTableEntry,line 3425:ERROR:8] Error creating table 'docbox.NumericMeasContext'
[DDSQLDaemonCore_ConnectionThreadProc,line 4349:ERROR:4] Error creating subscription associated with the table 'docbox.NumericMeasContext'

The user manual doesn't give any other details on these errors.

This topic does have complex idl with sequences and many embedded structures so it may be exceeding some MySql constraint.

fercs77's picture
Offline
Last seen: 2 months 1 week ago
Joined: 01/15/2011
Posts: 30

Hi Anne,

Error 139 in the MySQL server looks like to be related to exceeding the maximum row size or the maximum number of columns allowed by the DBMS.

Appendix B in the Real-Time Connect User's Manual documents these limits. Also, you can read about the limits here:

http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

The maximum size of a row in MySQL 5.1 is limited to 65535 bytes. For example, you cannot have two fields of type VARHAR(40000) because the total width of the columns would exceed 65535 bytes.

I cannot identify a workaround to this issue at this point. If you are exceedeing the maximum size of a row one solution would be to replace the VARCHAR or VARBINARY fields with BLOB types. However, this is not a feature currently supported by RTC when the underlying DBMS is MySQL.

Regards,

- Fernando