mirror of
https://github.com/Wincent01/InfectedRose.git
synced 2026-01-06 04:09:50 -06:00
* Full Read/Write support for newer level file formats. * Added pointer/length tokens. Database: * Made it more reliable. * Speed up some operations. * Emit more sql. * Import/Export from SQLite, not viable, takes a very long time. Database concepts: * Npc creation. * Mission creation, W.I.P.
91 lines
2.2 KiB
C#
91 lines
2.2 KiB
C#
using InfectedRose.Database.Fdb;
|
|
using InfectedRose.Database.Sql;
|
|
|
|
namespace InfectedRose.Database
|
|
{
|
|
public class Field
|
|
{
|
|
internal Field(FdbRowData data, int index, Table table, Column column)
|
|
{
|
|
Data = data;
|
|
Index = index;
|
|
Table = table;
|
|
Column = column;
|
|
}
|
|
|
|
internal FdbRowData Data { get; }
|
|
|
|
internal int Index { get; }
|
|
|
|
internal Table Table { get; }
|
|
|
|
internal Column Column { get; }
|
|
|
|
public string Name => Table.TableInfo[Index].Name;
|
|
|
|
public DataType Type
|
|
{
|
|
get => Data.Fields[Index].type;
|
|
set
|
|
{
|
|
var dataField = Data.Fields[Index];
|
|
|
|
dataField.type = value;
|
|
|
|
Data.Fields[Index] = dataField;
|
|
}
|
|
}
|
|
|
|
public object Value
|
|
{
|
|
get
|
|
{
|
|
var data = Data.Fields[Index].value;
|
|
|
|
data = data switch
|
|
{
|
|
FdbString str => str.Value,
|
|
FdbBitInt lon => lon.Value,
|
|
_ => data
|
|
};
|
|
|
|
return data;
|
|
}
|
|
set
|
|
{
|
|
var where = Column.WhereSegment();
|
|
|
|
var dataField = Data.Fields[Index];
|
|
|
|
value = value switch
|
|
{
|
|
string str => new FdbString {Value = str},
|
|
long lon => new FdbBitInt {Value = lon},
|
|
_ => value
|
|
};
|
|
|
|
var type = value switch
|
|
{
|
|
FdbString _ => DataType.Text,
|
|
FdbBitInt _ => DataType.Bigint,
|
|
float _ => DataType.Float,
|
|
bool _ => DataType.Boolean,
|
|
null => DataType.Nothing,
|
|
_ => DataType.Integer
|
|
};
|
|
|
|
dataField.value = value;
|
|
dataField.type = type;
|
|
|
|
Data.Fields[Index] = dataField;
|
|
|
|
Table.Database.RegisterSql(this.SqlUpdate(where));
|
|
}
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return Name;
|
|
}
|
|
}
|
|
} |