anewt-developers team mailing list archive
-
anewt-developers team
-
Mailing list archive
-
Message #00262
[Branch ~uws/anewt/anewt.uws] Rev 1784: [database] Performance optimzation of row casting for MySQL
------------------------------------------------------------
revno: 1784
committer: Wouter Bolsterlee <uws@xxxxxxxxx>
branch nick: anewt.uws
timestamp: Wed 2010-03-31 20:57:08 +0200
message:
[database] Performance optimzation of row casting for MySQL
modified:
database/backend-mysql.lib.php
--
lp:anewt
https://code.launchpad.net/~uws/anewt/anewt.uws
Your team Anewt developers is subscribed to branch lp:anewt.
To unsubscribe from this branch go to https://code.launchpad.net/~uws/anewt/anewt.uws/+edit-subscription
=== modified file 'database/backend-mysql.lib.php'
--- database/backend-mysql.lib.php 2010-01-05 20:45:41 +0000
+++ database/backend-mysql.lib.php 2010-03-31 18:57:08 +0000
@@ -239,16 +239,19 @@
if (is_null($value))
continue;
+ /* Performance optimization: put some often-used types on top to
+ * avoid doing too many switch/case comparisons early on for
+ * relatively rare column * types.
+ *
+ * XXX: A static hash table mapping MySQL types to "Anewt conversion
+ * methods" (simple ints, for instance) followed by a short if/else
+ * construct for each of the conversion methods might be a better
+ * optimization approach.
+ */
switch ($type)
{
- case MYSQLI_TYPE_DECIMAL:
- case MYSQLI_TYPE_NEWDECIMAL:
- case MYSQLI_TYPE_BIT:
- case MYSQLI_TYPE_TINY:
- case MYSQLI_TYPE_SHORT:
+ /* Common integer types (INT) */
case MYSQLI_TYPE_LONG:
- case MYSQLI_TYPE_INT24:
- case MYSQLI_TYPE_YEAR:
$value = (int) $value;
break;
@@ -257,24 +260,14 @@
hold the values in an integer data type. */
if (PHP_INT_SIZE >= 8)
$value = (int) $value;
-
- break;
-
- case MYSQLI_TYPE_FLOAT:
- case MYSQLI_TYPE_DOUBLE:
- $value = (float) $value;
- break;
-
- case MYSQLI_TYPE_TINY_BLOB:
- case MYSQLI_TYPE_MEDIUM_BLOB:
- case MYSQLI_TYPE_LONG_BLOB:
- case MYSQLI_TYPE_BLOB:
+ break;
+
+
+ /* Common string types (VARCHAR) */
case MYSQLI_TYPE_VAR_STRING:
- case MYSQLI_TYPE_STRING:
- case MYSQLI_TYPE_CHAR:
- $value = (string) $value;
break;
+ /* Date and time types */
case MYSQLI_TYPE_TIMESTAMP:
case MYSQLI_TYPE_DATE:
case MYSQLI_TYPE_TIME:
@@ -283,15 +276,39 @@
$value = AnewtDateTime::parse_string($value);
break;
- case MYSQLI_TYPE_ENUM:
- case MYSQLI_TYPE_INTERVAL:
- case MYSQLI_TYPE_ENUM:
- case MYSQLI_TYPE_SET:
- case MYSQLI_TYPE_GEOMETRY:
- /* XXX: Fall-through: what should be done with these? */
-
+ /* Floating point types */
+ case MYSQLI_TYPE_FLOAT:
+ case MYSQLI_TYPE_DOUBLE:
+ $value = (float) $value;
+ break;
+
+ /* Less common integer types */
+ case MYSQLI_TYPE_TINY:
+ case MYSQLI_TYPE_INT24:
+ case MYSQLI_TYPE_SHORT:
+ case MYSQLI_TYPE_DECIMAL:
+ case MYSQLI_TYPE_NEWDECIMAL:
+ case MYSQLI_TYPE_BIT:
+ case MYSQLI_TYPE_YEAR:
+ $value = (int) $value;
+ break;
+
+ /* Fall-through for types that will be left as-is (no
+ * conversion, leave as string):
+ *
+ * - MYSQLI_TYPE_TINY_BLOB:
+ * - MYSQLI_TYPE_MEDIUM_BLOB:
+ * - MYSQLI_TYPE_LONG_BLOB:
+ * - MYSQLI_TYPE_BLOB:
+ * - MYSQLI_TYPE_STRING:
+ * - MYSQLI_TYPE_CHAR:
+ * - MYSQLI_TYPE_ENUM:
+ * - MYSQLI_TYPE_INTERVAL:
+ * - MYSQLI_TYPE_ENUM:
+ * - MYSQLI_TYPE_SET:
+ * - MYSQLI_TYPE_GEOMETRY:
+ */
default:
- /* No conversion, leave as string */
break;
}