Bug #25947 CreateFormat/CreateParameters Column of DataTypes collection incorrect for CHAR

Submitted: 30 Jan 2007 15:27 Modified: 2 Apr 2007 7:09
Reporter: Sönke Schau Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / NET Severity:S3 (Non-critical)
Version:5.0.5 OS:Windows (Windows)
Assigned to: CPU Architecture:Any

[30 Jan 2007 15:27] Sönke Schau
Description:
The CreateFormat Column of the DataTypes collection should contain a
"Format string that represents how to add this column to a data definition statement, such as CREATE TABLE. Each element in the CreateParameter array should be represented by a “parameter marker” in the format string. 
For example, the SQL data type DECIMAL needs a precision and a scale. In this case, the format string would be “DECIMAL({0},{1})”."

In the case of CHAR and VARCHAR the CreateFormat should be "CHAR({0})" resp. "VARCHAR({0})" and the CreateParameters Column should contain "Length".

The IsFixedLength Column should be "false" not "true"

I don't think there is a satisfactional solution for the SET or ENUM datatypes.

How to repeat:
const int SampleMaxLength = 100;
const int SampleMaxPrecision = 10;
const int SampleMaxScale = 3;

DbProviderFactory TargetDbProviderFactory = DbProviderFactories.GetFactory(
"MySql.Data.MySqlClient" );
using ( DbConnection TargetDbConnection =
TargetDbProviderFactory.CreateConnection() )
{
  TargetDbConnection.ConnectionString = "Server=localhost;User
Id=user;Password=secret;Database=PortalLogs";
  TargetDbConnection.Open();
  DataTable dtdt = DbConnection.GetSchema( "DataTypes", new string[] { } );

  foreach ( DataRow scdr in dtdt.Rows )
  {
    bool IsFixedPrecisionScale = Convert.ToBoolean( scdr["IsFixedPrecisionScale"] );
    bool IsFixedLength = Convert.ToBoolean( scdr["IsFixedLength"] );
    object[] Parameters = new object[( IsFixedLength ? 1 : 0 ) + ( IsFixedPrecisionScale ? 0 : 2 )];
    int index = 0;
    if ( IsFixedLength )
       Parameters[index++] = SampleMaxLength;
    if ( !IsFixedPrecisionScale )
    {
      Parameters[index++] = SampleMaxPrecision;
      Parameters[index++] = SampleMaxScale;
    }
    Console.WriteLine( scdr["CreateFormat"].ToString(), Parameters );
  }
}

Suggested fix:
Correct the values as stated in the description
[12 Mar 2007 10:31] Tonci Grgin
Hi Sönke and thanks for your report. 
I can agree with you on the basis of common sense but still I would like you to point me to part of MS docs describing what should be in "CreateFormat" for VARCHAR columns as I'm unable to locate it looking in http://msdn2.microsoft.com/en-us/library/hyx0dh68.aspx.
Also, I can't run your example with c/NET 5.0.3, only with 5.0.5. Are you sure about the version?
[12 Mar 2007 17:02] Sönke Schau
Hello Tonci,
please look at http://msdn2.microsoft.com/en-us/library/ms254501.aspx; search for "CreateFormat" and see how the field is meant to be used by MS.
I used a version of 5.0.3 which I patched for my reported problems 25906 and 25907.
Maybe this is why you can't run the sample with 5.0.3.
Best regards
Sönke
[12 Mar 2007 17:57] Tonci Grgin
Hi Sönke and thanks for clarification. Indeed it seems we're not following specs found in http://msdn2.microsoft.com/en-us/library/ms254501.aspx.

Verified as described.
[27 Mar 2007 18:41] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/23063
[27 Mar 2007 18:41] Reggie Burnett
Fixed in 5.0.7
[2 Apr 2007 7:09] MC Brown
A note has been added to the 5.0.7 changelog.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.055 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.