Changeset View
Changeset View
Standalone View
Standalone View
src/xsprintf/qsprintf.php
Show First 20 Lines • Show All 120 Lines • ▼ Show 20 Lines | case 'n': // Nullable... | ||||
$nullable = true; | $nullable = true; | ||||
break; | break; | ||||
default: | default: | ||||
throw new XsprintfUnknownConversionException("%n{$next}"); | throw new XsprintfUnknownConversionException("%n{$next}"); | ||||
} | } | ||||
break; | break; | ||||
case 'L': // List of.. | case 'L': // List of.. | ||||
_qsprintf_check_type($value, "L{$next}", $pattern); | qsprintf_check_type($value, "L{$next}", $pattern); | ||||
$pattern = substr_replace($pattern, '', $pos, 1); | $pattern = substr_replace($pattern, '', $pos, 1); | ||||
$length = strlen($pattern); | $length = strlen($pattern); | ||||
$type = 's'; | $type = 's'; | ||||
$done = true; | $done = true; | ||||
switch ($next) { | switch ($next) { | ||||
case 'd': // ...integers. | case 'd': // ...integers. | ||||
$value = implode(', ', array_map('intval', $value)); | $value = implode(', ', array_map('intval', $value)); | ||||
Show All 21 Lines | case 'L': // List of.. | ||||
break; | break; | ||||
default: | default: | ||||
throw new XsprintfUnknownConversionException("%L{$next}"); | throw new XsprintfUnknownConversionException("%L{$next}"); | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
if (!$done) { | if (!$done) { | ||||
_qsprintf_check_type($value, $type, $pattern); | qsprintf_check_type($value, $type, $pattern); | ||||
switch ($type) { | switch ($type) { | ||||
case 's': // String | case 's': // String | ||||
if ($nullable && $value === null) { | if ($nullable && $value === null) { | ||||
$value = 'NULL'; | $value = 'NULL'; | ||||
} else { | } else { | ||||
$value = "'".$escaper->escapeUTF8String((string)$value)."'"; | $value = "'".$escaper->escapeUTF8String((string)$value)."'"; | ||||
} | } | ||||
$type = 's'; | $type = 's'; | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | function xsprintf_query($userdata, &$pattern, &$pos, &$value, &$length) { | ||||
} | } | ||||
if ($prefix) { | if ($prefix) { | ||||
$value = $prefix.$value; | $value = $prefix.$value; | ||||
} | } | ||||
$pattern[$pos] = $type; | $pattern[$pos] = $type; | ||||
} | } | ||||
function _qsprintf_check_type($value, $type, $query) { | function qsprintf_check_type($value, $type, $query) { | ||||
switch ($type) { | switch ($type) { | ||||
case 'Ld': | case 'Ld': | ||||
case 'Ls': | case 'Ls': | ||||
case 'LC': | case 'LC': | ||||
case 'LB': | case 'LB': | ||||
case 'Lf': | case 'Lf': | ||||
if (!is_array($value)) { | if (!is_array($value)) { | ||||
throw new AphrontParameterQueryException( | throw new AphrontParameterQueryException( | ||||
$query, | $query, | ||||
"Expected array argument for %{$type} conversion."); | "Expected array argument for %{$type} conversion."); | ||||
} | } | ||||
if (empty($value)) { | if (empty($value)) { | ||||
throw new AphrontParameterQueryException( | throw new AphrontParameterQueryException( | ||||
$query, | $query, | ||||
"Array for %{$type} conversion is empty."); | "Array for %{$type} conversion is empty."); | ||||
} | } | ||||
foreach ($value as $scalar) { | foreach ($value as $scalar) { | ||||
_qsprintf_check_scalar_type($scalar, $type, $query); | qsprintf_check_scalar_type($scalar, $type, $query); | ||||
} | } | ||||
break; | break; | ||||
default: | default: | ||||
_qsprintf_check_scalar_type($value, $type, $query); | qsprintf_check_scalar_type($value, $type, $query); | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
function _qsprintf_check_scalar_type($value, $type, $query) { | function qsprintf_check_scalar_type($value, $type, $query) { | ||||
switch ($type) { | switch ($type) { | ||||
case 'Q': | case 'Q': | ||||
case 'LC': | case 'LC': | ||||
case 'T': | case 'T': | ||||
case 'C': | case 'C': | ||||
if (!is_string($value)) { | if (!is_string($value)) { | ||||
throw new AphrontParameterQueryException( | throw new AphrontParameterQueryException( | ||||
$query, | $query, | ||||
Show All 34 Lines |