List:Commits« Previous MessageNext Message »
From:U-ROWVWADEjas Date:April 20 2007 4:05pm
Subject:bk commit into 5.1-falcon tree (jas:1.2623)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1-falcon repository of . When  does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-04-20 12:04:55-04:00, jas@rowvwade. +3 -0
  Fix of a second, even more obscure, bug related to falcon
  bug 27767.

  storage/falcon/StorageTableShare.cpp@stripped, 2007-04-20 12:04:47-04:00, jas@rowvwade. +1 -1
    Consistently upcase table space name.

  storage/falcon/ha_falcon.cpp@stripped, 2007-04-20 12:04:48-04:00, jas@rowvwade. +98 -78
    Reject decimal ranges that we can't handle.

  storage/falcon/ha_falcon.h@stripped, 2007-04-20 12:04:48-04:00, jas@rowvwade. +1 -1
    Added mechanism to return error text without a storage connection.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	jas
# Host:	rowvwade.
# Root:	D:/MySQL/mysql-5.1-falcon

--- 1.24/storage/falcon/StorageTableShare.cpp	2007-04-20 12:05:14 -04:00
+++ 1.25/storage/falcon/StorageTableShare.cpp	2007-04-20 12:05:14 -04:00
@@ -470,7 +470,7 @@
 	cleanupTableName(path, tableName, sizeof(tableName), schema, sizeof(schema));
 	givenName = tableName;
 	givenSchema = schema;
-	tableSpace = givenSchema;
+	tableSpace = JString::upcase(givenSchema);
 	name = JString::upcase(tableName);
 	schemaName = JString::upcase(schema);
 }

--- 1.150/storage/falcon/ha_falcon.cpp	2007-04-20 12:05:14 -04:00
+++ 1.151/storage/falcon/ha_falcon.cpp	2007-04-20 12:05:14 -04:00
@@ -300,6 +300,7 @@
 	mySqlThread = NULL;
 	activeBlobs = NULL;
 	freeBlobs = NULL;
+	errorText = NULL;
 	//dbName = NULL;
 	
 	if (table_arg)
@@ -635,8 +636,11 @@
 		storageShare->cleanupFieldName(field->field_name, nameBuffer,
 										sizeof(nameBuffer));
 		gen.gen("%s  \"%s\" ", sep, nameBuffer);
-		genType(field, &gen);
+		int ret = genType(field, &gen);
 
+		if (ret)
+			DBUG_RETURN(ret);
+		
 		if (!field->maybe_null())
 			gen.gen(" not null");
 			
@@ -670,6 +674,7 @@
 			if ((ret = createIndex(schemaName, tableName, form->key_info + n, n)))
 				{
 				storageTable->deleteTable();
+				
 				DBUG_RETURN(error(ret));
 				}
 
@@ -1794,90 +1799,103 @@
 	int length = 0;
 
 	switch (field->real_type()) 
-	{
-	case MYSQL_TYPE_DECIMAL:
-	case MYSQL_TYPE_TINY:
-	case MYSQL_TYPE_SHORT:
-	case MYSQL_TYPE_BIT:
-		type = "smallint";
-		break;
-
-	case MYSQL_TYPE_INT24:
-	case MYSQL_TYPE_LONG:
-	case MYSQL_TYPE_YEAR:
-		type = "int";
-		break;
-
-	case MYSQL_TYPE_FLOAT:
-		type = "float";
-		break;
-
-	case MYSQL_TYPE_DOUBLE:
-		type = "double";
-		break;
-
-	case MYSQL_TYPE_TIMESTAMP:
-		type = "timestamp";
-		break;
-
-	case MYSQL_TYPE_SET:
-	case MYSQL_TYPE_LONGLONG:
-		type = "bigint";
-		break;
-
-	/*
-		Falcon's date and time types don't handle invalid dates like MySQL's do,
-		so we just use an int for storage
-	*/
-	
-	case MYSQL_TYPE_DATE:
-	case MYSQL_TYPE_TIME:
-	case MYSQL_TYPE_ENUM:
-	case MYSQL_TYPE_NEWDATE:
-		type = "int";
-		break;
-
-	case MYSQL_TYPE_DATETIME:
-		type = "bigint";
-		break;
-
-	case MYSQL_TYPE_VARCHAR:
-	case MYSQL_TYPE_VAR_STRING:
-	case MYSQL_TYPE_STRING:
 		{
-		CHARSET_INFO *charset = field->charset();
+		case MYSQL_TYPE_DECIMAL:
+		case MYSQL_TYPE_TINY:
+		case MYSQL_TYPE_SHORT:
+		case MYSQL_TYPE_BIT:
+			type = "smallint";
+			break;
 
-		if (charset)
+		case MYSQL_TYPE_INT24:
+		case MYSQL_TYPE_LONG:
+		case MYSQL_TYPE_YEAR:
+			type = "int";
+			break;
+
+		case MYSQL_TYPE_FLOAT:
+			type = "float";
+			break;
+
+		case MYSQL_TYPE_DOUBLE:
+			type = "double";
+			break;
+
+		case MYSQL_TYPE_TIMESTAMP:
+			type = "timestamp";
+			break;
+
+		case MYSQL_TYPE_SET:
+		case MYSQL_TYPE_LONGLONG:
+			type = "bigint";
+			break;
+
+		/*
+			Falcon's date and time types don't handle invalid dates like MySQL's do,
+			so we just use an int for storage
+		*/
+		
+		case MYSQL_TYPE_DATE:
+		case MYSQL_TYPE_TIME:
+		case MYSQL_TYPE_ENUM:
+		case MYSQL_TYPE_NEWDATE:
+			type = "int";
+			break;
+
+		case MYSQL_TYPE_DATETIME:
+			type = "bigint";
+			break;
+
+		case MYSQL_TYPE_VARCHAR:
+		case MYSQL_TYPE_VAR_STRING:
+		case MYSQL_TYPE_STRING:
 			{
-			arg = charset->name;
-			type = "varchar (%d) collation %s";
+			CHARSET_INFO *charset = field->charset();
+
+			if (charset)
+				{
+				arg = charset->name;
+				type = "varchar (%d) collation %s";
+				}
+			else
+				type = "varchar (%d)";
+				
+			length = field->field_length;
 			}
-		else
-			type = "varchar (%d)";
-			
-		length = field->field_length;
-		}
-		break;
+			break;
 
-	case MYSQL_TYPE_TINY_BLOB:
-	case MYSQL_TYPE_LONG_BLOB:
-	case MYSQL_TYPE_BLOB:
-	case MYSQL_TYPE_MEDIUM_BLOB:
-	case MYSQL_TYPE_GEOMETRY:
-		if (field->field_length < 256)
-			type = "varchar (256)";
-		else
-			type = "blob";
-		break;
+		case MYSQL_TYPE_TINY_BLOB:
+		case MYSQL_TYPE_LONG_BLOB:
+		case MYSQL_TYPE_BLOB:
+		case MYSQL_TYPE_MEDIUM_BLOB:
+		case MYSQL_TYPE_GEOMETRY:
+			if (field->field_length < 256)
+				type = "varchar (256)";
+			else
+				type = "blob";
+			break;
 
-	case MYSQL_TYPE_NEWDECIMAL:
-		gen->gen("numeric (%d,%d)", ((Field_new_decimal*) field)->precision,
-				((Field_new_decimal*) field)->dec);
-		return 0;
+		case MYSQL_TYPE_NEWDECIMAL:
+			{
+			Field_new_decimal *newDecimal = (Field_new_decimal*) field;
+			
+			if (newDecimal->precision > 18 && newDecimal->dec > 9)
+				{
+				errorText = "columns with greater than 18 digits precision and greater than 9 digits of fraction are not supported";
+				
+				return HA_ERR_UNSUPPORTED;
+				}
+				
+			gen->gen("numeric (%d,%d)", newDecimal->precision, newDecimal->dec);
+			
+			return 0;
+			}
 
-	default:
-		return -1;
-	}
+		default:
+			errorText = "unsupported Falcon data type";
+			
+			return HA_ERR_UNSUPPORTED;
+		}
 
 	gen->gen(type, length, arg);
 
@@ -2212,6 +2230,8 @@
 		const char *text = storageConnection->getLastErrorString();
 		buf->set(text, strlen(text), system_charset_info);
 		}
+	else if (errorText)
+		buf->set(errorText, strlen(errorText), system_charset_info);
 
 	return false;
 }

--- 1.34/storage/falcon/ha_falcon.h	2007-04-20 12:05:14 -04:00
+++ 1.35/storage/falcon/ha_falcon.h	2007-04-20 12:05:14 -04:00
@@ -132,6 +132,7 @@
   StorageConnection*	storageConnection;
   StorageTable*			storageTable;
   StorageTableShare*	storageShare;
+  const char*			errorText;
   THR_LOCK_DATA			lockData;			// MySQL lock
   THD					*mySqlThread;
   st_table_share		*share;
@@ -142,7 +143,6 @@
   int					errorKey;
   StorageBlob			*activeBlobs;
   StorageBlob			*freeBlobs;
-  //const char			*dbName;
   bool					haveStartKey;
   bool					haveEndKey;
   bool					tableLocked;
Thread
bk commit into 5.1-falcon tree (jas:1.2623)U-ROWVWADEjas20 Apr