Addshore has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/87050


Change subject: Add escaping for table names
......................................................................

Add escaping for table names

Change-Id: I3dfb4db365a6f507a9cf8884f2d149ee8a82e628
---
M src/MySQL/MySQLSchemaSqlBuilder.php
M src/SQLite/SQLiteSchemaSqlBuilder.php
M tests/phpunit/MySQL/MySQLSchemaSqlBuilderTest.php
M tests/phpunit/SQLite/SQLiteSchemaSqlBuilderTest.php
4 files changed, 26 insertions(+), 4 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseDatabase 
refs/changes/50/87050/1

diff --git a/src/MySQL/MySQLSchemaSqlBuilder.php 
b/src/MySQL/MySQLSchemaSqlBuilder.php
index 17a0389..d06463d 100644
--- a/src/MySQL/MySQLSchemaSqlBuilder.php
+++ b/src/MySQL/MySQLSchemaSqlBuilder.php
@@ -5,6 +5,7 @@
 use Wikibase\Database\Escaper;
 use Wikibase\Database\Schema\Definitions\FieldDefinition;
 use Wikibase\Database\Schema\SchemaModificationSqlBuilder;
+use Wikibase\Database\TableNameFormatter;
 
 /**
  * MySQL implementation of SchemaModificationSqlBuilder.
@@ -17,12 +18,15 @@
 class MySQLSchemaSqlBuilder implements SchemaModificationSqlBuilder {
 
        protected $fieldSqlBuilder;
+       protected $tableNameFormatter;
 
        /**
         * @param Escaper $fieldValueEscaper
+        * @param TableNameFormatter $tableNameFormatter
         */
-       public function __construct( Escaper $fieldValueEscaper ) {
+       public function __construct( Escaper $fieldValueEscaper, 
TableNameFormatter $tableNameFormatter ) {
                $this->fieldSqlBuilder = new MySQLFieldSqlBuilder( 
$fieldValueEscaper );
+               $this->tableNameFormatter = $tableNameFormatter;
        }
 
        /**
@@ -32,6 +36,8 @@
         * @return string
         */
        public function getRemoveFieldSql( $tableName, $fieldName ) {
+               $tableName = $this->tableNameFormatter->formatTableName( 
$tableName );
+               //todo escape $fieldName
                return "ALTER TABLE {$tableName} DROP {$fieldName}";
        }
 
@@ -42,6 +48,7 @@
         * @return string
         */
        public function getAddFieldSql( $tableName, FieldDefinition $field ) {
+               $tableName = $this->tableNameFormatter->formatTableName( 
$tableName );
                return "ALTER TABLE {$tableName} ADD " . 
$this->fieldSqlBuilder->getFieldSQL( $field );
        }
 
diff --git a/src/SQLite/SQLiteSchemaSqlBuilder.php 
b/src/SQLite/SQLiteSchemaSqlBuilder.php
index 5b04949..86c6632 100644
--- a/src/SQLite/SQLiteSchemaSqlBuilder.php
+++ b/src/SQLite/SQLiteSchemaSqlBuilder.php
@@ -5,6 +5,7 @@
 use Wikibase\Database\Escaper;
 use Wikibase\Database\Schema\Definitions\FieldDefinition;
 use Wikibase\Database\Schema\SchemaModificationSqlBuilder;
+use Wikibase\Database\TableNameFormatter;
 
 /**
  * SQLite implementation of SchemaModificationSqlBuilder.
@@ -17,12 +18,15 @@
 class SQLiteSchemaSqlBuilder implements SchemaModificationSqlBuilder {
 
        protected $fieldSqlBuilder;
+       protected $tableNameFormatter;
 
        /**
         * @param Escaper $fieldValueEscaper
+        * @param TableNameFormatter $tableNameFormatter
         */
-       public function __construct( Escaper $fieldValueEscaper ) {
+       public function __construct( Escaper $fieldValueEscaper, 
TableNameFormatter $tableNameFormatter ) {
                $this->fieldSqlBuilder = new SQLiteFieldSqlBuilder( 
$fieldValueEscaper );
+               $this->tableNameFormatter = $tableNameFormatter;
        }
 
        /**
@@ -42,6 +46,7 @@
         * @return string
         */
        public function getAddFieldSql( $tableName, FieldDefinition $field ) {
+               $tableName = $this->tableNameFormatter->formatTableName( 
$tableName );
                return "ALTER TABLE {$tableName} ADD COLUMN " . 
$this->fieldSqlBuilder->getFieldSQL( $field );
        }
 
diff --git a/tests/phpunit/MySQL/MySQLSchemaSqlBuilderTest.php 
b/tests/phpunit/MySQL/MySQLSchemaSqlBuilderTest.php
index 098a50d..9b844bf 100644
--- a/tests/phpunit/MySQL/MySQLSchemaSqlBuilderTest.php
+++ b/tests/phpunit/MySQL/MySQLSchemaSqlBuilderTest.php
@@ -23,7 +23,12 @@
                        ->method( 'getEscapedValue' )
                        ->will( $this->returnArgument(0) );
 
-               return new MySQLSchemaSqlBuilder( $mockEscaper );
+               $mockTableNameFormatter = $this->getMock( 
'Wikibase\Database\TableNameFormatter' );
+               $mockTableNameFormatter->expects( $this->any() )
+                       ->method( 'formatTableName' )
+                       ->will( $this->returnArgument(0) );
+
+               return new MySQLSchemaSqlBuilder( $mockEscaper, 
$mockTableNameFormatter );
        }
 
        public function testGetRemoveFieldSql(){
diff --git a/tests/phpunit/SQLite/SQLiteSchemaSqlBuilderTest.php 
b/tests/phpunit/SQLite/SQLiteSchemaSqlBuilderTest.php
index 7f30163..8832094 100644
--- a/tests/phpunit/SQLite/SQLiteSchemaSqlBuilderTest.php
+++ b/tests/phpunit/SQLite/SQLiteSchemaSqlBuilderTest.php
@@ -23,7 +23,12 @@
                        ->method( 'getEscapedValue' )
                        ->will( $this->returnArgument(0) );
 
-               return new SQLiteSchemaSqlBuilder( $mockEscaper );
+               $mockTableNameFormatter = $this->getMock( 
'Wikibase\Database\TableNameFormatter' );
+               $mockTableNameFormatter->expects( $this->any() )
+                       ->method( 'formatTableName' )
+                       ->will( $this->returnArgument(0) );
+
+               return new SQLiteSchemaSqlBuilder( $mockEscaper, 
$mockTableNameFormatter );
        }
 
        public function testGetAddFieldSql(){

-- 
To view, visit https://gerrit.wikimedia.org/r/87050
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3dfb4db365a6f507a9cf8884f2d149ee8a82e628
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseDatabase
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to