Fixed XF\Db\Exception: MySQL query error [1366]: Incorrect integer value: '' for column `XXX`.`xf_deletion_log`.`delete_user_id` at row 1

Fajfie

Member
Affected version
v2.2.6 Patch 2
Discourse importer bug:

Code:
[LIST]
[*]XF\Db\Exception: MySQL query error [1366]: Incorrect integer value: '' for column `XXX`.`xf_deletion_log`.`delete_user_id` at row 1
[*]src/XF/Db/AbstractStatement.php:228
[/LIST]

Code:
INSERT  INTO `xf_deletion_log` (`content_type`, `content_id`, `delete_date`, `delete_user_id`, `delete_username`, `delete_reason`) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE delete_date = LEAST(delete_date, VALUES(delete_date))
------------

#0 src/XF/Db/Mysqli/Statement.php(196): XF\Db\AbstractStatement->getException('MySQL query err...', 1366, '22007')
#1 src/XF/Db/Mysqli/Statement.php(77): XF\Db\Mysqli\Statement->getException('MySQL query err...', 1366, '22007')
#2 src/XF/Db/AbstractAdapter.php(94): XF\Db\Mysqli\Statement->execute()
#3 src/XF/Db/AbstractAdapter.php(218): XF\Db\AbstractAdapter->query('INSERT  INTO `x...', Array)
#4 src/XF/Import/Data/EntityEmulator.php(522): XF\Db\AbstractAdapter->insert('xf_deletion_log', Array, false, 'delete_date = L...')
#5 src/XF/Import/Data/AbstractEmulatedData.php(101): XF\Import\Data\EntityEmulator->insertStateRecord(Object(XF\Db\Mysqli\Adapter), 'deleted', 1524996608, Array)
#6 src/XF/Import/Data/Thread.php(93): XF\Import\Data\AbstractEmulatedData->insertStateRecord('deleted', 1524996608)
#7 src/XF/Import/Data/AbstractData.php(136): XF\Import\Data\Thread->postSave(7, 36)
#8 src/addons/XFI/Import/Importer/Discourse.php(1964): XF\Import\Data\AbstractData->save(7)
#9 src/XF/Import/Runner.php(242): XFI\Import\Importer\Discourse->stepThreads(Object(XF\Import\StepState), Array, 8)
#10 src/XF/Import/Runner.php(59): XF\Import\Runner->runStep('threads', Object(XF\Import\StepState), 8)
#11 src/XF/Import/Runner.php(152): XF\Import\Runner->run()
#12 src/XF/Import/Runner.php(128): XF\Import\Runner->runUntilCompleteInternal(Object(XF\Import\Manager), Object(Closure))
#13 src/XF/Cli/Command/Import.php(155): XF\Import\Runner->runUntilComplete(Object(XF\Import\Manager), Object(Closure))
#14 src/vendor/symfony/console/Command/Command.php(255): XF\Cli\Command\Import->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 src/vendor/symfony/console/Application.php(992): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 src/vendor/symfony/console/Application.php(255): Symfony\Component\Console\Application->doRunCommand(Object(XF\Cli\Command\Import), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 src/vendor/symfony/console/Application.php(148): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 src/XF/Cli/Runner.php(109): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 cmd.php(15): XF\Cli\Runner->run()
#20 {main}

Code:
array(1) {
  ["cli"] => string(17) "cmd.php xf:import"
}
 

XF Bug Bot

XenForo bug fixer bot
Staff member
Thank you for reporting this issue, it has now been resolved. We are aiming to include any changes that have been made in a future XFI release (1.5.1).

Change log:
Properly import Discourse content which was soft-deleted by a user who no longer exists
There may be a delay before changes are rolled out to the XenForo Community.
 

Jeremy P

XenForo developer
Staff member
I believe this should sort this one:

Diff:
diff --git a/src/addons/XFI/Import/Importer/Discourse.php b/src/addons/XFI/Import/Importer/Discourse.php
index b76a79a832..dea571b8ec 100644
--- a/src/addons/XFI/Import/Importer/Discourse.php
+++ b/src/addons/XFI/Import/Importer/Discourse.php
@@ -2859,7 +2859,7 @@ protected function extractDeletionLogData(array $record): array
 	{
 		return [
 			'date' => $this->convertTimestamp($record['deleted_at']),
-			'user_id' => $this->lookupId('user', $record['deleted_by_id']),
+			'user_id' => $this->lookupId('user', $record['deleted_by_id'], 0),
 			'username' => $record['deleted_by_username'] ?? ''
 		];
 	}
 
Top