Page MenuHomePhabricator

D19764.diff
No OneTemporary

D19764.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -22,6 +22,8 @@
'AphrontConnectionQueryException' => 'aphront/storage/exception/AphrontConnectionQueryException.php',
'AphrontCountQueryException' => 'aphront/storage/exception/AphrontCountQueryException.php',
'AphrontDatabaseConnection' => 'aphront/storage/connection/AphrontDatabaseConnection.php',
+ 'AphrontDatabaseTableRef' => 'xsprintf/AphrontDatabaseTableRef.php',
+ 'AphrontDatabaseTableRefInterface' => 'xsprintf/AphrontDatabaseTableRefInterface.php',
'AphrontDatabaseTransactionState' => 'aphront/storage/connection/AphrontDatabaseTransactionState.php',
'AphrontDeadlockQueryException' => 'aphront/storage/exception/AphrontDeadlockQueryException.php',
'AphrontDuplicateKeyQueryException' => 'aphront/storage/exception/AphrontDuplicateKeyQueryException.php',
@@ -645,6 +647,10 @@
'Phobject',
'PhutilQsprintfInterface',
),
+ 'AphrontDatabaseTableRef' => array(
+ 'Phobject',
+ 'AphrontDatabaseTableRefInterface',
+ ),
'AphrontDatabaseTransactionState' => 'Phobject',
'AphrontDeadlockQueryException' => 'AphrontRecoverableQueryException',
'AphrontDuplicateKeyQueryException' => 'AphrontQueryException',
diff --git a/src/xsprintf/AphrontDatabaseTableRef.php b/src/xsprintf/AphrontDatabaseTableRef.php
new file mode 100644
--- /dev/null
+++ b/src/xsprintf/AphrontDatabaseTableRef.php
@@ -0,0 +1,23 @@
+<?php
+
+final class AphrontDatabaseTableRef
+ extends Phobject
+ implements AphrontDatabaseTableRefInterface {
+
+ private $database;
+ private $table;
+
+ public function __construct($database, $table) {
+ $this->database = $database;
+ $this->table = $table;
+ }
+
+ public function getAphrontRefDatabaseName() {
+ return $this->database;
+ }
+
+ public function getAphrontRefTableName() {
+ return $this->table;
+ }
+
+}
diff --git a/src/xsprintf/AphrontDatabaseTableRefInterface.php b/src/xsprintf/AphrontDatabaseTableRefInterface.php
new file mode 100644
--- /dev/null
+++ b/src/xsprintf/AphrontDatabaseTableRefInterface.php
@@ -0,0 +1,8 @@
+<?php
+
+interface AphrontDatabaseTableRefInterface {
+
+ public function getAphrontRefDatabaseName();
+ public function getAphrontRefTableName();
+
+}
diff --git a/src/xsprintf/qsprintf.php b/src/xsprintf/qsprintf.php
--- a/src/xsprintf/qsprintf.php
+++ b/src/xsprintf/qsprintf.php
@@ -234,6 +234,17 @@
$type = 's';
break;
+ case 'R': // Database + Table Reference
+ $database_name = $value->getAphrontRefDatabaseName();
+ $database_name = $escaper->escapeColumnName($database_name);
+
+ $table_name = $value->getAphrontRefTableName();
+ $table_name = $escaper->escapeColumnName($table_name);
+
+ $value = $database_name.'.'.$table_name;
+ $type = 's';
+ break;
+
default:
throw new XsprintfUnknownConversionException($type);
}
@@ -312,6 +323,16 @@
}
break;
+ case 'R':
+ if (!($value instanceof AphrontDatabaseTableRefInterface)) {
+ throw new AphrontParameterQueryException(
+ pht(
+ 'Parameter to "%s" conversion in "qsprintf(...)" is not an '.
+ 'instance of AphrontDatabaseTableRefInterface.',
+ '%R'));
+ }
+ break;
+
default:
throw new XsprintfUnknownConversionException($type);
}

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 11, 8:51 PM (1 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7551939
Default Alt Text
D19764.diff (3 KB)

Event Timeline