SVN Discussion

Revision - Database Handler Revamp

Commited 1 year ago ago by t13sii]Database Handler(s) Revamp

Former DOL Database Code is pretty old and never changed much since migration from XML repository to MySQL driver, I tried to add support for SQLite some time ago, I managed to get some code working with both SQL drivers and some other parts needed complete duplication to handle differences...

I wanted to improve the SQLite driver implementation as I tend to use it a lot for standalone and portable development environment (Compiling Dawn of Light and Running server from a usb key !), I also wanted to implement low-level Unit Tests to track correctly upcoming change of the DOL Database API and make sure the Database Driver doesn't do anything funny !

So I ended up making a huge patch, which is always a long task and error prone...

Here is a List of all the major changes from this revamp :

[*:3rt13sii] Removed XML files repository support completely, and cleaned up unused Cache Logic and DataSets Handling.

[*:3rt13sii] Optimized DataTable Handler to have the full Table Object Model and Reflection Methods available when writing drivers implementation. This remove the needs for a lot of Reflection hacks in every parts of the Database Library !

[*:3rt13sii] Changed the hierarchy logic for the Database API to target SQL connection instead of Static File Access, File repository could still be used if anybody implement a file-based driver that mimic SQL behavior but it's not the default implementation logic.

[*:3rt13sii] Added a collection of Unit Tests for Database to be run with Continuous Integration, Unit Tests default to SQLite driver to run without MySQL Engine, but can be explicitly run against a local MySQL Database if needed...

[*:3rt13sii] New "Vectorized" Database API, Vectorized Methods are designed to handle whole collection of DataObjects at once, trying to group database access using parametrized queries which can reach greater throughput than query string. This can bring performance improvement up to 20 times faster when filling relations.

[*:3rt13sii] Update of XML Auto Updater to use the new Vectorized API reducing server first startup time.

[*:3rt13sii] Implementation of Multiple Field Unique Constraints, matching a group of DataObject Fields as Unique when all their values are matched against another record Fields, this can bring improvement for Table like Merchant Item which should have unique page and slot pair for each ItemList

[*:3rt13sii] New Table View Handler, can create views or handle existing views, can support update if the view has a real Table base, can be used as an easy mechanism to subclass DataObject with new Relations.

[*:3rt13sii] Complete Rewrite of the MySQL Driver Abstraction, using optimized string builders for queries and reflection methods resolved from datatable handlers, it can now flawlessly alter table primary key of any kind, supports index alteration as well to match DataObjects Indexes or Constraints.

[*:3rt13sii] Complete Rewrite of the SQLite Driver Abstraction, no more tied to MySQL Implementation, can alter table using Code logic to create a new table and import old data then destroy old table, workaround implemented to match SQLite behavior to MySQL behavior.[/*:m:3rt13sii]

To sum up : everything was rewritten except the Database Interface to keep the compatibility with DOL without changing Game Server Code !

This Revamp was made to get obsolete code out of DOL Database code, clean up the mess of previous updates, make the code readable for future improvements and other driver implementations, add some new features like unique constraints, better table alteration support, get the SQLite backend up to production level, and lastly get some dramatic speed improvement !

[color=#BF0000:3rt13sii]! Important Change !
To prevent spamming your log with unfiltered debug message please update your logconfig.xml

<logger name="DOL.Database.Handlers">
<level value="INFO" />

[color=#BF0000:3rt13sii]! New Unique Constraints !
If you happen to have Data Duplicate when updating to this new Database Handler here are the queries I used to solve this on Storm RvR

UPDATE (SELECT COUNT(*) AS `Rows`, `ItemTemplate_ID` FROM `itemtemplate` GROUP BY `ItemTemplate_ID` Having `Rows` > 1) as `duplicates`
JOIN `ItemTemplate` ON (`ItemTemplate`.`ItemTemplate_ID` = `duplicates`.`ItemTemplate_ID`) SET `ItemTemplate`.`ItemTemplate_ID` = UUID() WHERE 1

UPDATE (SELECT COUNT(*) AS `Rows`, `CraftedItem_ID` FROM `CraftedItem` GROUP BY `CraftedItem_ID` Having `Rows` > 1) as `duplicates`
JOIN `CraftedItem` ON (`CraftedItem`.`CraftedItem_ID` = `duplicates`.`CraftedItem_ID`) SET `CraftedItem`.`CraftedItem_ID` = UUID() WHERE 1

Join Discussion - (10 replies)

Git Tag

Commited 2 years ago ago by hkir10]Release : ...

Merge pull request #3 from dol-leodagan/master :

Commited by Leodagan

@dol-leodagan Update …
@dol-leodagan Updated : Adding NuGet Dependencies for Dependencies
@dol-leodagan Updated : Changed DLL References to match Nuget Dependencies
@dol-leodagan Removed : Shared Modules Binary Dependencies
@dol-leodagan Updated : Reference to SQLite architecture binaries …
@dol-leodagan Revert "Removed : Shared Modules Binary Dependencies" …
@dol-leodagan Added : Appveyor AutoBuild Configuration
@dol-leodagan Updated : appveyor.yml wrong format ?

23 changed files with 115 additions and 436 deletions.

[color=#000080:1thkir10]Modified : .gitignore
[color=#000080:1thkir10]Modified : DOLBase/DOLBase.csproj
[color=#000080:1thkir10]Modified : DOLConfig/DOLConfig.csproj
[color=#000080:1thkir10]Modified : DOLDatabase/DOLDatabase.csproj
[color=#000080:1thkir10]Modified : DOLServer/DOLServer.csproj
[color=#800080:1thkir10]Added : DOLServer/packages.config
[color=#000080:1thkir10]Modified : GameServer/GameServer.csproj
[color=#000080:1thkir10]Modified : GameServerScripts/GameServerScripts.csproj
[color=#000080:1thkir10]Modified :
[color=#000080:1thkir10]Modified : UnitTests/UnitTests.csproj
[color=#800080:1thkir10]Added : appveyor.yml
[color=#800000:1thkir10]Removed : sharedModules/ICSharpCode.SharpZLib/ICSharpCode.SharpZipLib.dll
[color=#800000:1thkir10]Removed : sharedModules/ICSharpCode.SharpZLib/SharpZLib.license.txt
[color=#800000:1thkir10]Removed : sharedModules/MySQL/MySql.Data.dll
[color=#800000:1thkir10]Removed : sharedModules/SQLite/System.Data.SQLite.Linq.dll
[color=#800000:1thkir10]Removed : sharedModules/SQLite/System.Data.SQLite.dll
[color=#800000:1thkir10]Removed : sharedModules/SQLite/x64/SQLite.Interop.dll
[color=#800000:1thkir10]Removed : sharedModules/SQLite/x86/SQLite.Interop.dll
[color=#800000:1thkir10]Removed : sharedModules/log4net/log4net.dll
[color=#800000:1thkir10]Removed : sharedModules/log4net/log4net.license.txt
[color=#800000:1thkir10]Removed : sharedModules/nunit/nunit.core.dll
[color=#800000:1thkir10]Removed : sharedModules/nunit/nunit.framework.dll
[color=#800000:1thkir10]Removed : sharedModules/nunit/nunit.license.txt

Join Discussion - (5 replies)

SVN Rev. 3564

Commited 2 years ago ago by Graveen

*) Change from Kataract
- Fixed: /gminfo command was not displaying AccountName correctly

[color=#000080:3wrbswuz]Modified : /DOLSharp/trunk/.gitignore
[color=#000080:3wrbswuz]Modified : /DOLSharp/trunk/GameServer/commands/gmcommands/GMinfo.cs

Join Discussion - (0 replies)

SVN Rev. 3563

Commited 2 years ago ago by aria

Add: some translations part 3

[color=#000080:3fky5bnf]Modified : /DOLSharp/trunk/GameServer/craft/AdvancedCraftingSkill.cs
[color=#000080:3fky5bnf]Modified : /DOLSharp/trunk/GameServer/keeps/Gameobjects/Guards/GameKeepGuard.cs
[color=#000080:3fky5bnf]Modified : /DOLSharp/trunk/GameServer/keeps/Managers/Player Manager.cs
[color=#000080:3fky5bnf]Modified : /DOLSharp/trunk/GameServer/keeps/Relics/GameRelicPad.cs
[color=#000080:3fky5bnf]Modified : /DOLSharp/trunk/GameServer/language/DE/Keeps.txt
[color=#000080:3fky5bnf]Modified : /DOLSharp/trunk/GameServer/language/EN/Language-EN.txt
[color=#000080:3fky5bnf]Modified : /DOLSharp/trunk/GameServer/serverrules/DemonsBreachJumpPoint.cs

Join Discussion - (1 replies)

SVN Rev. 3562

Commited 2 years ago ago by aria

add: some translations and jump point requirements

[color=#000080:3bmhvyby]Modified : /DOLSharp/trunk/GameServer/gameobjects/Bonedancer/CommanderPet.cs
[color=#000080:3bmhvyby]Modified : /DOLSharp/trunk/GameServer/language/DE/GameObjects/CommanderPet.txt
[color=#800080:3bmhvyby]Added : /DOLSharp/trunk/GameServer/language/DE/GameObjects/CustomNPC/GameHastener.txt
[color=#000080:3bmhvyby]Modified : /DOLSharp/trunk/GameServer/language/DE/GameObjects/GamePlayer.txt
[color=#000080:3bmhvyby]Modified : /DOLSharp/trunk/GameServer/language/DE/Packets.txt
[color=#000080:3bmhvyby]Modified : /DOLSharp/trunk/GameServer/language/DE/PlayerTitles.txt
[color=#800080:3bmhvyby]Added : /DOLSharp/trunk/GameServer/language/DE/Quests/Hibernia/WingsOfTheIsle.txt

Join Discussion - (0 replies)

SVN Rev: 3561

Commited 2 years ago ago by nab Ku and Leodagan

- Fixed ParseDirectory function in ScriptMgr.cs for 3559 and 3560 problems.


Join Discussion - (1 replies)

SVN Rev: 3560

Commited 2 years ago ago by anges


After researches with Leodagan, the problem is elsewhere.
If you are a obj folder in debug\scripts\, delete it and rebuild.
Additionnaly, if you updated your core to 3559, don't forget to delete unnecessary USE_MONO serverproperty on your database.

Join Discussion - (1 replies)

SVN Rev: 3559

Commited 2 years ago ago by ab Ku

Patched ScriptMgr to choose if using Mono or not because when using it, the code actualy block the SriptLoaded event
- Added a ServerProperty named USE_MONO in ServerProperties.cs
- Modified ScriptMgr.cs for use old code if don't use Mono.


I had suprised my scripted mobs don't load with the last svn revision, so i tried each and founded the 3407 code block it.
So i modified it for works but can use the Serverproperty USE_MONO to activate or not using Mono.
WARN : If you activate USE_MONO, you can only use database for loading Mobs.

Join Discussion - (8 replies)

SVN Rev: 3557

Commited 2 years ago ago by

- Changed: Recast timer as well as delays to Live values.


Join Discussion - (0 replies)

SVN Rev: 3556

Commited 2 years ago ago by

- Bugfix: Climbing on keeps is now working even if ALLOW_TOWER_CLIMB is set to false.


Join Discussion - (1 replies)

SVN Navigation