Files
InfectedRose/InfectedRose.Database/Field.cs
wincent c0c3d88477 Level files:
* 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.
2020-03-05 22:33:14 +01:00

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;
}
}
}