function coder_upgrade_parse_insert_query_string in Coder 7
Same name and namespace in other branches
- 7.2 coder_upgrade/conversions/db.inc \coder_upgrade_parse_insert_query_string()
Replaces D6 database API call with D7 equivalent.
@todo Fill in this with unhandled items.
Parameters
string $sql: The SQL query string to parse.
array $values: List of replacement values passed to db_query().
1 call to coder_upgrade_parse_insert_query_string()
- coder_upgrade_parse_query_string in coder_upgrade/
conversions/ db.inc - Replaces D6 database API call with D7 equivalent.
File
- coder_upgrade/
conversions/ db.inc, line 349 - Provides conversion routines applied to database API function calls and hooks.
Code
function coder_upgrade_parse_insert_query_string($sql, $values) {
global $_coder_upgrade_replacement_values_is_array;
$new = array();
// Look for query with a WHERE clause.
// INSERT INTO {mytable_longer_name} (intvar, stringvar, floatvar) VALUES (%d, '%s', %f)
// TODO How does DBTNG handle multiple rows to insert?
$find = '@INSERT INTO\\s+{(\\w+)}\\s+\\((.*?)\\)\\s+VALUES\\s+\\((.*?)\\)@s';
preg_match($find, $sql, $matches);
cdp($matches);
if (empty($matches)) {
cdp($sql, '$sql');
clp('ERROR: could not parse sql INSERT statement.');
return array(
'NULL',
);
// $new;
}
// Parse fields to be updated.
if (count($matches[2]) != count($matches[3])) {
clp('ERROR: could not parse field names and replacements on sql INSERT statement.');
return array(
'NULL',
);
// $new;
}
$fields = preg_split("@,\\s*@", $matches[2]);
$holders = preg_split("@,\\s*@", $matches[3]);
$fields = array_combine($fields, $holders);
cdp($fields);
$replacement_count = coder_upgrade_count_sql_values($holders);
$_coder_upgrade_replacement_values_is_array = count($values) == 1 && $replacement_count > 1;
// Build DBTNG syntax string.
// TODO Values could be literals not placeholders.
$new[] = "\$id = db_insert('{$matches[1]}')";
$new[] = "\t->fields(array(";
foreach ($fields as $field => $value) {
if (preg_match('/%[sdbf]/', $value)) {
// Value is a placeholder.
$value = coder_upgrade_next_replacement_value($values);
}
else {
// Value is a literal (assume so).
}
$new[] = "\t\t'{$field}' => {$value},";
}
$new[] = "\t))";
$new[] = "\t->execute();";
return $new;
}