Skip to content

Commit 69c7b41

Browse files
committed
Update to The War Within
1 parent 00763dd commit 69c7b41

30 files changed

Lines changed: 1121 additions & 99 deletions

File tree

WDE.DatabaseEditors/Data/Structs/DatabaseColumnJson.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public bool Equals(ColumnFullName x, ColumnFullName y)
171171

172172
public int GetHashCode(ColumnFullName obj)
173173
{
174-
return HashCode.Combine(obj.ForeignTable, obj.ColumnName);
174+
return HashCode.Combine(obj.ForeignTable?.ToLowerInvariant(), obj.ColumnName.ToLowerInvariant());
175175
}
176176
}
177177

WDE.DatabaseEditors/Loaders/DatabaseTableDataProvider.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,14 @@ await messageBoxService.ShowDialog(new MessageBoxFactory<bool>()
288288

289289
var conditionsResult = new ConditionsOnlyDatabaseSource(definition.Condition.SourceGroupColumn?.Name.ColumnName, definition.Condition.SourceEntryColumn?.ColumnName, definition.Condition.SourceIdColumn?.ColumnName);
290290
result = conditionsResult;
291+
var fakeColumns = new List<ColumnFullName>();
292+
if (definition.Condition.SourceGroupColumn != null)
293+
fakeColumns.Add(definition.Condition.SourceGroupColumn.Name);
294+
if (definition.Condition.SourceEntryColumn != null)
295+
fakeColumns.Add(definition.Condition.SourceEntryColumn.Value);
296+
if (definition.Condition.SourceIdColumn != null)
297+
fakeColumns.Add(definition.Condition.SourceIdColumn.Value);
298+
columns = fakeColumns;
291299

292300
foreach (var key in keys)
293301
{

WDE.DatabaseEditors/Services/GenericTableQueryParserProvider.cs

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ private bool TryBuildKey(DatabaseTableDefinitionJson definition, DatabaseForeign
9494

9595
public async Task<bool> ParseDelete(DeleteQuery deleteQuery, IQueryParsingContext context)
9696
{
97+
if (deleteQuery.TableName == DatabaseTable.WorldTable("conditions"))
98+
return ParseDeleteConditions(deleteQuery, context);
99+
97100
var defi = tableDefinitionProvider.GetDefinitionByTableName(deleteQuery.TableName);
98101
if (defi == null)
99102
return false;
@@ -135,8 +138,75 @@ public async Task<bool> ParseDelete(DeleteQuery deleteQuery, IQueryParsingContex
135138
return true;
136139
}
137140

141+
private bool ParseDeleteConditions(DeleteQuery deleteConditions, IQueryParsingContext context)
142+
{
143+
foreach (var where in deleteConditions.Where.Conditions)
144+
{
145+
var sourceTypeColumn = where.Columns.IndexOf("SourceTypeOrReferenceId");
146+
if (sourceTypeColumn == -1)
147+
return false;
148+
149+
if (!(where.Values[sourceTypeColumn] is long sourceType))
150+
return false;
151+
152+
var defi = tableDefinitionProvider.Definitions.FirstOrDefault(d =>
153+
d.IsOnlyConditionsTable == OnlyConditionMode.IgnoreTableCompletely &&
154+
d.Condition?.SourceType == sourceType);
155+
156+
if (defi == null || defi.PrimaryKey.Count != 1)
157+
return false;
158+
159+
var sourceEntryColumn = where.Columns.IndexOf("SourceEntry");
160+
var sourceGroupColumn = where.Columns.IndexOf("SourceGroup");
161+
var sourceIdColumn = where.Columns.IndexOf("SourceId");
162+
163+
DatabaseKey? key = null;
164+
165+
if (defi.Condition!.SourceEntryColumn.HasValue && defi.PrimaryKey[0] == defi.Condition!.SourceEntryColumn.Value)
166+
{
167+
if (sourceEntryColumn == -1)
168+
return false;
169+
170+
if (where.Values[sourceEntryColumn] is not long sourceEntry)
171+
return false;
172+
173+
key = new DatabaseKey(sourceEntry);
174+
}
175+
else if (defi.Condition!.SourceGroupColumn != null && defi.PrimaryKey[0] == defi.Condition!.SourceGroupColumn.Name)
176+
{
177+
if (sourceGroupColumn == -1)
178+
return false;
179+
180+
if (where.Values[sourceGroupColumn] is not long sourceGroup)
181+
return false;
182+
183+
key = new DatabaseKey(sourceGroup);
184+
}
185+
else if (defi.Condition!.SourceIdColumn.HasValue && defi.PrimaryKey[0] == defi.Condition!.SourceIdColumn.Value)
186+
{
187+
if (sourceIdColumn == -1)
188+
return false;
189+
190+
if (where.Values[sourceIdColumn] is not long sourceId)
191+
return false;
192+
193+
key = new DatabaseKey(sourceId);
194+
}
195+
196+
if (!key.HasValue)
197+
return false;
198+
199+
context.ProduceItem(new DatabaseTableSolutionItem(key.Value, false, true, new DatabaseTable(defi.DataDatabaseType, defi.TableName), false));
200+
}
201+
202+
return true;
203+
}
204+
138205
public async Task<bool> ParseInsert(InsertQuery query, IQueryParsingContext context)
139206
{
207+
if (query.TableName == DatabaseTable.WorldTable("conditions"))
208+
return ParseInsertConditions(query, context);
209+
140210
var defi = tableDefinitionProvider.GetDefinitionByTableName(query.TableName);
141211
if (defi == null)
142212
return false;
@@ -180,6 +250,73 @@ public async Task<bool> ParseInsert(InsertQuery query, IQueryParsingContext cont
180250
return true;
181251
}
182252

253+
private bool ParseInsertConditions(InsertQuery query, IQueryParsingContext context)
254+
{
255+
var sourceTypeColumn = query.Columns.IndexOf("SourceTypeOrReferenceId");
256+
if (sourceTypeColumn == -1)
257+
return false;
258+
259+
var sourceEntryColumn = query.Columns.IndexOf("SourceEntry");
260+
var sourceGroupColumn = query.Columns.IndexOf("SourceGroup");
261+
var sourceIdColumn = query.Columns.IndexOf("SourceId");
262+
263+
if (sourceEntryColumn == -1 && sourceGroupColumn == -1 && sourceIdColumn == -1)
264+
return false;
265+
266+
foreach (var insert in query.Inserts)
267+
{
268+
if (!(insert[sourceTypeColumn] is long sourceType))
269+
return false;
270+
271+
var defi = tableDefinitionProvider.Definitions.FirstOrDefault(d =>
272+
d.IsOnlyConditionsTable == OnlyConditionMode.IgnoreTableCompletely &&
273+
d.Condition?.SourceType == sourceType);
274+
275+
if (defi == null || defi.PrimaryKey.Count != 1)
276+
return false;
277+
278+
DatabaseKey? key = null;
279+
280+
if (defi.Condition!.SourceEntryColumn.HasValue && defi.PrimaryKey[0] == defi.Condition!.SourceEntryColumn.Value)
281+
{
282+
if (sourceEntryColumn == -1)
283+
return false;
284+
285+
if (insert[sourceEntryColumn] is not long sourceEntry)
286+
return false;
287+
288+
key = new DatabaseKey(sourceEntry);
289+
}
290+
else if (defi.Condition!.SourceGroupColumn != null && defi.PrimaryKey[0] == defi.Condition!.SourceGroupColumn.Name)
291+
{
292+
if (sourceGroupColumn == -1)
293+
return false;
294+
295+
if (insert[sourceGroupColumn] is not long sourceGroup)
296+
return false;
297+
298+
key = new DatabaseKey(sourceGroup);
299+
}
300+
else if (defi.Condition!.SourceIdColumn.HasValue && defi.PrimaryKey[0] == defi.Condition!.SourceIdColumn.Value)
301+
{
302+
if (sourceIdColumn == -1)
303+
return false;
304+
305+
if (insert[sourceIdColumn] is not long sourceId)
306+
return false;
307+
308+
key = new DatabaseKey(sourceId);
309+
}
310+
311+
if (!key.HasValue)
312+
return false;
313+
314+
context.ProduceItem(new DatabaseTableSolutionItem(key.Value, false, true, new DatabaseTable(defi.DataDatabaseType, defi.TableName), false));
315+
}
316+
317+
return true;
318+
}
319+
183320
public async Task<bool> ParseUpdate(UpdateQuery query, IQueryParsingContext context)
184321
{
185322
var defi = tableDefinitionProvider.GetDefinitionByTableName(query.TableName);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<UserControl xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:viewModels="clr-namespace:WDE.PacketViewer.ViewModels;assembly=WDE.PacketViewer"
6+
xmlns:avaloniaEdit="https://github.com/avaloniaui/avaloniaedit"
7+
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
8+
x:DataType="viewModels:StoryTellerDocumentViewModel"
9+
x:Class="WDE.PacketViewer.Avalonia.Views.StoryTellerDocumentView">
10+
<avaloniaEdit:TextEditor Document="{CompiledBinding Document, Converter={x:Static NativeTextDocumentConverter.Instance}}"
11+
BorderThickness="0"
12+
Name="Editor"
13+
PointerMoved="Editor_OnPointerMoved"
14+
ContextRequested="Editor_OnContextRequested"
15+
AvalonEditExtra.SyntaxExtension="story"
16+
ShowLineNumbers="True" FontFamily="Consolas,Menlo,Courier,Courier New" />
17+
</UserControl>

0 commit comments

Comments
 (0)