Is there a way to merge a lot of databases?

Announcements, support questions, and discussion for the Dialogue System.
Post Reply
shortlin
Posts: 73
Joined: Wed Jun 03, 2020 1:52 am

Is there a way to merge a lot of databases?

Post by shortlin »

Hi Tony,Sorry to bother..
if I want to merge more than 2 databases to 1 database.Is there a way to do it quickly?I just know I could do this in Dialogue tab and only could merge one database to another.But if there are a lot of databases that I want to merge,I should use it a lot of time.I knew you said there is one way to deal the multi-database,but I think just one database is simple to me..

So If I want to merge the databases,is there a way to do it just like click one button?
Or Could I write a code to do this?
User avatar
Tony Li
Posts: 22051
Joined: Thu Jul 18, 2013 1:27 pm

Re: Is there a way to merge a lot of databases?

Post by Tony Li »

Hi,

You could write an editor script that uses the DatabaseMerger class. Example:

Code: Select all

DialogueDatabase mainDatabase;
DialogueDatabase[] otherDatabases;
...
foreach (var otherDatabase in otherDatabases)
{
    DatabaseMerger(mainDatabase, otherDatabase, DatabaseMerger.ConflictingIDRule.AssignUniqueIDs);
}
EditorUtility.setDirty(mainDatabase);
Important:
  • Back up your databases first. Make sure you have a good backup of all of your original databases.
  • After merging, thoroughly check the database to make sure everything is correct.
shortlin
Posts: 73
Joined: Wed Jun 03, 2020 1:52 am

Re: Is there a way to merge a lot of databases?

Post by shortlin »

Thank you,I let it work with addressable.

================
Just a note to write this:if there is someone has the same question.I think before merging them you must use unique ID tool to choose all databases and use DatabaseMerger.ConflictingIDRule.ReplaceConflictingIDs to replace the same title's conversation.Good thing is using the unique ID tool choose all databases do not let the same title's ID be different.If the tool let them be different,you could not use DatabaseMerger.ConflictingIDRule.ReplaceConflictingIDs to overwrite the old one.
================

So sorry that I have 3 question again:
1.Could I write a code to do the same thing just like I use unique ID tool In Unity?

2.if I would like to import a lot of CSV, Is there a way to do the same thing like merge them to a database?

3.I want the mainDatabase not use your way,I just want use initialDatabase,but when I use GetComponent<DialogueSystemController>().initialDatabase It would be error:invalidOperationException: Collection was modified; enumeration operation may not execute.
How to solve it?Or the mainDatabase only can use merge by drag the database or load outside data(such like addresable)?
User avatar
Tony Li
Posts: 22051
Joined: Thu Jul 18, 2013 1:27 pm

Re: Is there a way to merge a lot of databases?

Post by Tony Li »

shortlin wrote: Thu Oct 15, 2020 4:23 am1.Could I write a code to do the same thing just like I use unique ID tool In Unity?
Yes. Feel free to use any of the code in Unique ID Tool to do that.
shortlin wrote: Thu Oct 15, 2020 4:23 am2.if I would like to import a lot of CSV, Is there a way to do the same thing like merge them to a database?
If the CSV file is in the same format created by the Dialogue Editor's Database > Export Database > CSV function, then you can import it as a database and then merge it.

If you have many CSV files, you could combine them into one CSV file and make sure that CSV has unique IDs. Then just import that one CSV into a database.
shortlin
Posts: 73
Joined: Wed Jun 03, 2020 1:52 am

Re: Is there a way to merge a lot of databases?

Post by shortlin »

Thank you.Tony,but about the 2 questions,could you give me the direction to do what you said?(firt question is I want to know the code referrence.second question I knew I could use csv import ,but this tool just could import one csv,so I want to know how to combine all csv to one csv)
And I modified the article to add the third question ,maybe you missed that.
User avatar
Tony Li
Posts: 22051
Joined: Thu Jul 18, 2013 1:27 pm

Re: Is there a way to merge a lot of databases?

Post by Tony Li »

shortlin wrote: Thu Oct 15, 2020 9:19 amfirst question is I want to know the code reference.
I didn't have a code reference in mind. I thought you could just look at the code in UniqueIDWindow.cs. In particular, look at the ProcessDatabases() method.
shortlin wrote: Thu Oct 15, 2020 9:19 am.second question I knew I could use csv import ,but this tool just could import one csv,so I want to know how to combine all csv to one csv)
You can try to merge them in a spreadsheet program. But you must put the rows in the correct order. The combined CSV file must match the importer's CSV File Format.
shortlin wrote: Thu Oct 15, 2020 4:23 am3.I want the mainDatabase not use your way,I just want use initialDatabase,but when I use GetComponent<DialogueSystemController>().initialDatabase It would be error:invalidOperationException: Collection was modified; enumeration operation may not execute.
How to solve it?Or the mainDatabase only can use merge by drag the database or load outside data(such like addresable)?
If you want to load the database at runtime, do not assign to initialDatabase. Instead, use DialogueManager.AddDatabase(). Example:

Code: Select all

databaseAddressableAssetReference.LoadAssetAsync();
yield return operation;
DialogueManager.AddDatabase(operation.Result);
shortlin
Posts: 73
Joined: Wed Jun 03, 2020 1:52 am

Re: Is there a way to merge a lot of databases?

Post by shortlin »

Thank you Tony,about sencond question,if I want to write codes to import the one csv which is combined ,do you have a function to do that(means import the csv file to database,just like use the Unity,'s tool)or just like first question,could you point out what cs file and inside method that you use?
User avatar
Tony Li
Posts: 22051
Joined: Thu Jul 18, 2013 1:27 pm

Re: Is there a way to merge a lot of databases?

Post by Tony Li »

Hi,

Look at CSVConverterWindow.cs.
shortlin
Posts: 73
Joined: Wed Jun 03, 2020 1:52 am

Re: Is there a way to merge a lot of databases?

Post by shortlin »

Thank you!!!

Sorry I have a new question...
If I want to export one database to a lot of csv by the conversation titles(means use the conversation titles be the csv files' name).Is there a way to do this?
User avatar
Tony Li
Posts: 22051
Joined: Thu Jul 18, 2013 1:27 pm

Re: Is there a way to merge a lot of databases?

Post by Tony Li »

Hi,

There is not a built-in way, but you could write an editor script to do it. The CSVUtility class can help. Give it a List<List<string>>.

The outer List<List<string>> is the list of rows.

The inner List<List<string>> is the list of columns in each row.
Post Reply