static void CreateTable(
            this MySqlConnection conn,
            SqlTable table,
            ChangeEngine engine,
            PrimaryKeyInfo primaryKey,
            Dictionary <string, IColumnInfo> fields,
            Dictionary <string, NamedKeyInfo> tableKeys,
            uint tableRevision,
            ILog log)
        {
            log.InfoFormat("Creating table '{0}' at revision {1}", table.Name, tableRevision);
            var fieldSqls = new List <string>();

            foreach (IColumnInfo field in fields.Values)
            {
                fieldSqls.Add(field.FieldSql());
            }
            if (null != primaryKey)
            {
                fieldSqls.Add(primaryKey.FieldSql());
            }
            foreach (NamedKeyInfo key in tableKeys.Values)
            {
                fieldSqls.Add(key.FieldSql());
            }

            string cmd = "CREATE TABLE `" + MySqlHelper.EscapeString(table.Name) + "` (";

            cmd += string.Join(",", fieldSqls);
            cmd += ") COMMENT='" + tableRevision.ToString() + "' ENGINE=" + (engine != null ? engine.Engine : table.Engine);
            if (table.IsDynamicRowFormat)
            {
                cmd += " ROW_FORMAT=DYNAMIC";
            }
            cmd += " CHARACTER SET UTF8;";
            ExecuteStatement(conn, cmd, log);
        }