gogcom / galaxy-integrations-python-api

NOTE: Please report here only issues related to the python API. Issues and general feedback regarding the Galaxy Client 2.0 shall be sent via Galaxy Client menu
MIT License
1.28k stars 224 forks source link

Invalid SQL statement with certain game names #142

Open burnhamup opened 4 years ago

burnhamup commented 4 years ago

I was trying to import games with the Retroarch Sega Genesis plugin, and ran into an issue where no games were being displayed. I found in the GalaxyClient.log the following

Failed to check and update ownerships locally: Invalid SQL statement

This was after all the game names were parsed. I believe the issue was with the the following game name

Sonic 3D Blast ~ Sonic 3D Flickies' Island

After removing the apostrophe, I was able to resync all of the games.

mbanczerowski commented 4 years ago

Hey, I cannot reproduce with

    async def get_owned_games(self):
        return [Game("test_game_with_apostrophe", "Sonic 3D Blast ~ Sonic 3D Flickies' Island", None, LicenseInfo(LicenseType.SinglePurchase))]

Maybe do you mean game_id not game_title?

Can you send this GalaxyClient.log ?

burnhamup commented 4 years ago

I believe this integration uses the same name for the game_id as it does the game_title

Here's the relevant bits from the GalaxyClient.log

2020-05-06 17:42:25.648 [Information][ (0)] [TID 6124][galaxy_client]: Successfully imported 62 games for platform segag with GRKs: segag_Wonder Boy V - Monster World III, segag_Wonder Boy in Monster World, segag_Wonder Boy III - Monster Lair, segag_Virtua Fighter 2, segag_Vectorman, segag_Vectorman 2, segag_Revenge of Shinobi, The, segag_Sword of Vermilion, segag_Super Thunder Blade, segag_Bare Knuckle - Ikari no Tetsuken ~ Streets of Rage, segag_Streets of Rage 3, segag_Bare Knuckle III, segag_Streets of Rage 2, segag_Story of Thor, The - Hikari o Tsugumono, segag_Story of Thor, The, segag_Space Harrier II, segag_Sonic The Hedgehog, segag_Sonic The Hedgehog 2, segag_Sonic the Hedgehog: Spinball, segag_Sonic 3D Blast ~ Sonic 3D Flickies' Island, segag_Sonic & Knuckles + Sonic The Hedgehog 3, segag_Sonic & Knuckles + Sonic The Hedgehog 2, segag_Shinobi III - Return of the Ninja Master, segag_Shining in the Darkness, segag_Shining Force, segag_Shining Force II, segag_Shadow Dancer - The Secret of Shinobi, segag_Ristar, segag_Phantasy Star IV, segag_Phantasy Star III - Generations of Doom, segag_Phantasy Star II, segag_Light Crusader, segag_Legende de Thor, La, segag_Landstalker, segag_Kid Chameleon, segag_Gunstar Heroes, segag_Golden Axe, segag_Golden Axe III, segag_Golden Axe II, segag_Galaxy Force II, segag_Gain Ground, segag_Flicky, segag_Fatal Labyrinth, segag_Eternal Champions, segag_ESWAT - City Under Siege, segag_Ecco the Dolphin, segag_Ecco Jr., segag_Ecco - The Tides of Time, segag_Dynamite Headdy, segag_Dr. Robotnik's Mean Bean Machine, segag_DEcapAttack, segag_Crack Down, segag_Comix Zone, segag_Columns, segag_Columns III, segag_Bonanza Bros., segag_Bio Hazard Battle, segag_Beyond Oasis, segag_Altered Beast, segag_Alien Storm, segag_Alien Soldier, segag_Alex Kidd in the Enchanted Castle.
2020-05-06 17:42:25.662 [Information][ (0)] [TID 6376][galaxy_client]: Successfully cached 19 external accounts data in the database.
2020-05-06 17:42:25.787 [Information][ (0)] [TID 6376][galaxy_client]: No games on platform 'segag' need to be marked as owned.
2020-05-06 17:42:25.885 [Error][ (0)] [TID 6376][galaxy_client]: Failed to check and update ownerships locally: Invalid SQL statement

And the corresponding bit from the segag_plugin

2020-05-06 11:49:48,232 - root - DEBUG - Sending data: {"jsonrpc": "2.0", "id": "2761", "result": {"owned_games": [{"game_id": "Wonder Boy V - Monster World III", "game_title": "Wonder Boy V - Monster World III", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Wonder Boy in Monster World", "game_title": "Wonder Boy in Monster World", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Wonder Boy III - Monster Lair", "game_title": "Wonder Boy III - Monster Lair", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Virtua Fighter 2", "game_title": "Virtua Fighter 2", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Vectorman", "game_title": "Vectorman", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Vectorman 2", "game_title": "Vectorman 2", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Revenge of Shinobi, The", "game_title": "Revenge of Shinobi, The", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Sword of Vermilion", "game_title": "Sword of Vermilion", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Super Thunder Blade", "game_title": "Super Thunder Blade", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Bare Knuckle - Ikari no Tetsuken ~ Streets of Rage", "game_title": "Bare Knuckle - Ikari no Tetsuken ~ Streets of Rage", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Streets of Rage 3", "game_title": "Streets of Rage 3", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Bare Knuckle III", "game_title": "Bare Knuckle III", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Streets of Rage 2", "game_title": "Streets of Rage 2", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Story of Thor, The - Hikari o Tsugumono", "game_title": "Story of Thor, The - Hikari o Tsugumono", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Story of Thor, The", "game_title": "Story of Thor, The", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Space Harrier II", "game_title": "Space Harrier II", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Sonic The Hedgehog", "game_title": "Sonic The Hedgehog", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Sonic The Hedgehog 2", "game_title": "Sonic The Hedgehog 2", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Sonic the Hedgehog: Spinball", "game_title": "Sonic the Hedgehog: Spinball", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Sonic 3D Blast ~ Sonic 3D Flickies' Island", "game_title": "Sonic 3D Blast ~ Sonic 3D Flickies' Island", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Sonic & Knuckles + Sonic The Hedgehog 3", "game_title": "Sonic & Knuckles + Sonic The Hedgehog 3", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Sonic & Knuckles + Sonic The Hedgehog 2", "game_title": "Sonic & Knuckles + Sonic The Hedgehog 2", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Shinobi III - Return of the Ninja Master", "game_title": "Shinobi III - Return of the Ninja Master", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Shining in the Darkness", "game_title": "Shining in the Darkness", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Shining Force", "game_title": "Shining Force", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Shining Force II", "game_title": "Shining Force II", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Shadow Dancer - The Secret of Shinobi", "game_title": "Shadow Dancer - The Secret of Shinobi", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Ristar", "game_title": "Ristar", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Phantasy Star IV", "game_title": "Phantasy Star IV", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Phantasy Star III - Generations of Doom", "game_title": "Phantasy Star III - Generations of Doom", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Phantasy Star II", "game_title": "Phantasy Star II", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Light Crusader", "game_title": "Light Crusader", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Legende de Thor, La", "game_title": "Legende de Thor, La", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Landstalker", "game_title": "Landstalker", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Kid Chameleon", "game_title": "Kid Chameleon", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Gunstar Heroes", "game_title": "Gunstar Heroes", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Golden Axe", "game_title": "Golden Axe", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Golden Axe III", "game_title": "Golden Axe III", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Golden Axe II", "game_title": "Golden Axe II", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Galaxy Force II", "game_title": "Galaxy Force II", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Gain Ground", "game_title": "Gain Ground", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Flicky", "game_title": "Flicky", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Fatal Labyrinth", "game_title": "Fatal Labyrinth", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Eternal Champions", "game_title": "Eternal Champions", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "ESWAT - City Under Siege", "game_title": "ESWAT - City Under Siege", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Ecco the Dolphin", "game_title": "Ecco the Dolphin", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Ecco Jr.", "game_title": "Ecco Jr.", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Ecco - The Tides of Time", "game_title": "Ecco - The Tides of Time", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Dynamite Headdy", "game_title": "Dynamite Headdy", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Dr. Robotnik's Mean Bean Machine", "game_title": "Dr. Robotnik's Mean Bean Machine", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "DEcapAttack", "game_title": "DEcapAttack", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Crack Down", "game_title": "Crack Down", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Comix Zone", "game_title": "Comix Zone", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Columns", "game_title": "Columns", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Columns III", "game_title": "Columns III", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Bonanza Bros.", "game_title": "Bonanza Bros.", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Bio Hazard Battle", "game_title": "Bio Hazard Battle", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Beyond Oasis", "game_title": "Beyond Oasis", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Altered Beast", "game_title": "Altered Beast", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Alien Storm", "game_title": "Alien Storm", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Alien Soldier", "game_title": "Alien Soldier", "license_info": {"license_type": "SinglePurchase"}}, {"game_id": "Alex Kidd in the Enchanted Castle", "game_title": "Alex Kidd in the Enchanted Castle", "license_info": {"license_type": "SinglePurchase"}}]}}
mbanczerowski commented 4 years ago

Ok, thanks for the report. Should be done with #54 , maybe also some escaping in SQL - passing to Galaxy team to prepare list of allowed characters in ids.