You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.6 KiB
137 lines
4.6 KiB
// Copyright (c) 2004-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2 as published by
|
|
// the Free Software Foundation
|
|
//
|
|
// There are special exceptions to the terms and conditions of the GPL
|
|
// as it is applied to this software. View the full text of the
|
|
// exception in file EXCEPTIONS in the directory of this software
|
|
// distribution.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
using System;
|
|
using MySql.Data.MySqlClient;
|
|
using System.Globalization;
|
|
|
|
namespace MySql.Data.Types
|
|
{
|
|
internal class MetaData
|
|
{
|
|
public static bool IsNumericType(string typename)
|
|
{
|
|
string lowerType = typename.ToLower(CultureInfo.InvariantCulture);
|
|
switch (lowerType)
|
|
{
|
|
case "int":
|
|
case "integer":
|
|
case "numeric":
|
|
case "decimal":
|
|
case "dec":
|
|
case "fixed":
|
|
case "tinyint":
|
|
case "mediumint":
|
|
case "bigint":
|
|
case "real":
|
|
case "double":
|
|
case "float":
|
|
case "serial":
|
|
case "smallint": return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool SupportScale(string typename)
|
|
{
|
|
string lowerType = typename.ToLower(CultureInfo.InvariantCulture);
|
|
switch (lowerType)
|
|
{
|
|
case "numeric":
|
|
case "decimal":
|
|
case "dec":
|
|
case "real": return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static MySqlDbType NameToType(string typeName, bool unsigned,
|
|
bool realAsFloat, MySqlConnection connection)
|
|
{
|
|
switch (typeName.ToUpper(CultureInfo.InvariantCulture))
|
|
{
|
|
case "CHAR": return MySqlDbType.String;
|
|
case "VARCHAR": return MySqlDbType.VarChar;
|
|
case "DATE": return MySqlDbType.Date;
|
|
case "DATETIME": return MySqlDbType.DateTime;
|
|
case "NUMERIC":
|
|
case "DECIMAL":
|
|
case "DEC":
|
|
case "FIXED":
|
|
if (connection.driver.Version.isAtLeast(5, 0, 3))
|
|
return MySqlDbType.NewDecimal;
|
|
else
|
|
return MySqlDbType.Decimal;
|
|
case "YEAR":
|
|
return MySqlDbType.Year;
|
|
case "TIME":
|
|
return MySqlDbType.Time;
|
|
case "TIMESTAMP":
|
|
return MySqlDbType.Timestamp;
|
|
case "SET": return MySqlDbType.Set;
|
|
case "ENUM": return MySqlDbType.Enum;
|
|
case "BIT": return MySqlDbType.Bit;
|
|
|
|
case "TINYINT":
|
|
return unsigned ? MySqlDbType.UByte : MySqlDbType.Byte;
|
|
case "BOOL":
|
|
case "BOOLEAN":
|
|
return MySqlDbType.Byte;
|
|
case "SMALLINT":
|
|
return unsigned ? MySqlDbType.UInt16 : MySqlDbType.Int16;
|
|
case "MEDIUMINT":
|
|
return unsigned ? MySqlDbType.UInt24 : MySqlDbType.Int24;
|
|
case "INT":
|
|
case "INTEGER":
|
|
return unsigned ? MySqlDbType.UInt32 : MySqlDbType.Int32;
|
|
case "SERIAL":
|
|
return MySqlDbType.UInt64;
|
|
case "BIGINT":
|
|
return unsigned ? MySqlDbType.UInt64 : MySqlDbType.Int64;
|
|
case "FLOAT": return MySqlDbType.Float;
|
|
case "DOUBLE": return MySqlDbType.Double;
|
|
case "REAL": return
|
|
realAsFloat ? MySqlDbType.Float : MySqlDbType.Double;
|
|
case "TEXT":
|
|
return MySqlDbType.Text;
|
|
case "BLOB":
|
|
return MySqlDbType.Blob;
|
|
case "LONGBLOB":
|
|
return MySqlDbType.LongBlob;
|
|
case "LONGTEXT":
|
|
return MySqlDbType.LongText;
|
|
case "MEDIUMBLOB":
|
|
return MySqlDbType.MediumBlob;
|
|
case "MEDIUMTEXT":
|
|
return MySqlDbType.MediumText;
|
|
case "TINYBLOB":
|
|
return MySqlDbType.TinyBlob;
|
|
case "TINYTEXT":
|
|
return MySqlDbType.TinyText;
|
|
case "BINARY":
|
|
return MySqlDbType.Binary;
|
|
case "VARBINARY":
|
|
return MySqlDbType.VarBinary;
|
|
}
|
|
throw new MySqlException("Unhandled type encountered");
|
|
}
|
|
|
|
}
|
|
}
|
|
|