fix: finish basic export test on Virtools 5 environment
This commit is contained in:
1 parent
6943088df1
commit
7d9b7f14e8
9 files changed
+123
-81
No files matched your search
@@ -268,7 +268,7 @@ namespace VSW::Materializer::DataTypes {
|
||||
int64_t reader_setting_param_guid;
|
||||
YYCC::yycc_u8string reader_file_ext;
|
||||
// Manager and Render Engine specific
|
||||
CKBOOL manager_active;
|
||||
bool manager_active;
|
||||
// Behavior specific
|
||||
YYCC::yycc_u8string behavior_guids;
|
||||
};
|
||||
|
||||
+59
-59
@@ -39,6 +39,7 @@ failed: throw std::runtime_error("fail to bind value for prepared statement.");
|
||||
#define REVEAL_ENUM(enum_val) static_cast<std::underlying_type_t<decltype(enum_val)>>(enum_val)
|
||||
#define REVEAL_U8STR(u8_str) YYCC::EncodingHelper::ToOrdinary(u8_str.c_str()), -1, SQLITE_TRANSIENT
|
||||
#define REVEAL_BLOB(blob_val) (blob_val).ptr, (blob_val).length, SQLITE_TRANSIENT
|
||||
#define REVEAL_BOOL(bool_val) ((bool_val) ? 1 : 0)
|
||||
|
||||
#pragma endregion
|
||||
|
||||
@@ -123,19 +124,19 @@ failed: throw std::runtime_error("fail to bind value for prepared statement.");
|
||||
AbstractDatabase(file) {
|
||||
// initialize table
|
||||
BEGIN_CTOR;
|
||||
CTOR_SQL_EXEC("CREATE TABLE [script] ([thisobj] INTEGER, [name] TEXT, [index] INTEGER, [behavior] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [behavior] ([thisobj] INTEGER, [name] TEXT, [type] INTEGER, [proto_name] TEXT, [proto_guid] TEXT, [flags] INTEGER, [priority] INTEGER, [version] INTEGER, [pin_count] TEXT, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pTarget] ([thisobj] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [parent] INTEGER, [direct_source] INTEGER, [shard_source] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pIn] ([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [parent] INTEGER, [direct_source] INTEGER, [shared_source] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pOut] ([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [script] ([beobj] INTEGER, [beobj_name] TEXT, [behavior_index] INTEGER, [behavior] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [behavior] ([thisobj] INTEGER, [name] TEXT, [type] INTEGER, [proto_name] TEXT, [proto_guid] INTEGER, [flags] INTEGER, [priority] INTEGER, [version] INTEGER, [pin_count_ptarget] INTEGER, [pin_count_pin] INTEGER, [pin_count_pout] INTEGER, [pin_count_bin] INTEGER, [pin_count_bout] INTEGER, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pTarget] ([thisobj] INTEGER, [name] TEXT, [type] INTEGER, [parent] INTEGER, [direct_source] INTEGER, [shared_source] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pIn] ([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [type] INTEGER, [parent] INTEGER, [direct_source] INTEGER, [shared_source] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pOut] ([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [type] INTEGER, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [bIn] ([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [bOut] ([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [bLink] ([input] INTEGER, [output] INTEGER, [delay] INTEGER, [input_obj] INTEGER, [input_type] INTEGER, [input_index] INETEGR, [output_obj] INTEGER, [output_type] INTEGER, [output_index] INETEGR, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pLocal] ([thisobj] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [is_setting] INTEGER, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pLink] ([input] INTEGER, [output] INTEGER, [input_obj] INTEGER, [input_type] INTEGER, [input_is_bb] INTEGER, [input_index] INETEGR, [output_obj] INTEGER, [output_type] INTEGER, [output_is_bb] INTEGER, [output_index] INETEGR, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pOper] ([thisobj] INTEGER, [op] TEXT, [op_guid] TEXT, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [bLink] ([input] INTEGER, [output] INTEGER, [delay] INTEGER, [parent] INTEGER, [input_obj] INTEGER, [input_type] INTEGER, [input_index] INTEGER, [output_obj] INTEGER, [output_type] INTEGER, [output_index] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pLocal] ([thisobj] INTEGER, [name] TEXT, [type] INTEGER, [is_setting] INTEGER, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pLink] ([parent] INTEGER, [input] INTEGER, [input_obj] INTEGER, [input_type] INTEGER, [input_is_bb] INTEGER, [input_index] INTEGER, [output] INTEGER, [output_obj] INTEGER, [output_type] INTEGER, [output_is_bb] INTEGER, [output_index] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pOper] ([thisobj] INTEGER, [op] INTEGER, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [eLink] ([export_obj] INTEGER, [internal_obj] INTEGER, [is_in] INTEGER, [index] INTEGER, [parent] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pAttr] ([thisobj] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [pAttr] ([thisobj] INTEGER, [name] TEXT, [type] INTEGER, [owner] INTEGER);");
|
||||
CTOR_SQL_EXEC("CREATE TABLE [data] ([field] TEXT, [data] BLOB, [parent] INTEGER);");
|
||||
END_CTOR;
|
||||
}
|
||||
@@ -163,134 +164,133 @@ failed: throw std::runtime_error("fail to bind value for prepared statement.");
|
||||
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_script& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script] VALUES (?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.host_name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.index));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.beobj));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.beobj_name)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.behavior_index));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.behavior));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_behavior& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_behavior] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [behavior] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.name)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.type));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.proto_name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.proto_guid.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.proto_name)));
|
||||
WRITER_BIND(sqlite3_bind_int64(WRITER_STMT, WRITER_INDEX, data.proto_guid));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.flags));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.priority));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.version));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.pin_count.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.pin_count_ptarget));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.pin_count_pin));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.pin_count_pout));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.pin_count_bin));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.pin_count_bout));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_bIn& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_bIn] VALUES (?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [bIn] VALUES (?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.index));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.name)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_bOut& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_bOut] VALUES (?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [bOut] VALUES (?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.index));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.name)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_pIn& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_pIn] VALUES (?, ?, ?, ?, ?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [pIn] VALUES (?, ?, ?, ?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.index));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type_guid.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.name)));
|
||||
WRITER_BIND(sqlite3_bind_int64(WRITER_STMT, WRITER_INDEX, data.type));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.direct_source));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.shared_source));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_pOut& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_pOut] VALUES (?, ?, ?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [pOut] VALUES (?, ?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.index));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type_guid.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.name)));
|
||||
WRITER_BIND(sqlite3_bind_int64(WRITER_STMT, WRITER_INDEX, data.type));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_bLink& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_bLink] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [bLink] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.input));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.output));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.delay));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.input_obj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_ENUM(data.input_type)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.input_index));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.output_obj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_ENUM(data.output_type)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.output_index));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_pLocal& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_pLocal] VALUES (?, ?, ?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [pLocal] VALUES (?, ?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type_guid.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.is_setting));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.name)));
|
||||
WRITER_BIND(sqlite3_bind_int64(WRITER_STMT, WRITER_INDEX, data.type));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_BOOL(data.is_setting)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_pAttr& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_pAttr] VALUES (?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [pAttr] VALUES (?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type_guid.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.name)));
|
||||
WRITER_BIND(sqlite3_bind_int64(WRITER_STMT, WRITER_INDEX, data.type));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.owner));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_pLink& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_pLink] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [pLink] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.input));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.output));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.input_obj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_ENUM(data.input_type)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.input_is_bb));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_BOOL(data.input_is_bb)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.input_index));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.output));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.output_obj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_ENUM(data.output_type)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.output_is_bb));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_BOOL(data.output_is_bb)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.output_index));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_pOper& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_pOper] VALUES (?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [pOper] VALUES (?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.op.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.op_guid.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_int64(WRITER_STMT, WRITER_INDEX, data.op));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_eLink& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_eLink] VALUES (?, ?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [eLink] VALUES (?, ?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.export_obj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.internal_obj));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.is_in));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_BOOL(data.is_in)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.index));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_pTarget& data) {
|
||||
BEGIN_WRITER("INSERT INTO [script_pTarget] VALUES (?, ?, ?, ?, ?, ?, ?);");
|
||||
BEGIN_WRITER("INSERT INTO [pTarget] VALUES (?, ?, ?, ?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.thisobj));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.name.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, data.type_guid.c_str(), -1, SQLITE_TRANSIENT));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.name)));
|
||||
WRITER_BIND(sqlite3_bind_int64(WRITER_STMT, WRITER_INDEX, data.type));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.direct_source));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.shared_source));
|
||||
@@ -298,9 +298,9 @@ failed: throw std::runtime_error("fail to bind value for prepared statement.");
|
||||
}
|
||||
void ScriptDatabase::Write(const DataTypes::Script::Table_data& data) {
|
||||
BEGIN_WRITER("INSERT INTO [data] VALUES (?, ?, ?);");
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.field)));
|
||||
WRITER_BIND(sqlite3_bind_blob(WRITER_STMT, WRITER_INDEX, REVEAL_BLOB(data.data)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.field)));
|
||||
WRITER_BIND(sqlite3_bind_blob(WRITER_STMT, WRITER_INDEX, REVEAL_BLOB(data.data)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
END_WRITER;
|
||||
}
|
||||
|
||||
@@ -430,7 +430,7 @@ WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.parent));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.reader_flags));
|
||||
WRITER_BIND(sqlite3_bind_int64(WRITER_STMT, WRITER_INDEX, data.reader_setting_param_guid));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.reader_file_ext)));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, data.manager_active));
|
||||
WRITER_BIND(sqlite3_bind_int(WRITER_STMT, WRITER_INDEX, REVEAL_BOOL(data.manager_active)));
|
||||
WRITER_BIND(sqlite3_bind_text(WRITER_STMT, WRITER_INDEX, REVEAL_U8STR(data.behavior_guids)));
|
||||
END_WRITER;
|
||||
}
|
||||
|
||||
@@ -69,6 +69,11 @@ namespace VSW::Materializer::ExportDocument {
|
||||
// export document
|
||||
IterateMessage(expctx, ctx->GetMessageManager());
|
||||
IterateObject(expctx, ctx);
|
||||
|
||||
// report success
|
||||
expctx.reporter.EnableBeep();
|
||||
expctx.reporter.Info(YYCC_U8("Exporting document database done."));
|
||||
expctx.reporter.DisableBeep();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,11 +8,16 @@ namespace VSW::Materializer::ExportEnvironment {
|
||||
|
||||
struct ExportContext {
|
||||
ExportContext(CKContext* ctx, const YYCC::yycc_u8string_view& db_path, UINT code_page) :
|
||||
db(db_path), cache(), reporter(ctx), cp(code_page) {}
|
||||
db(db_path), cache(), reporter(ctx), cp(code_page), ctx(ctx), plugin_mgr(CKGetPluginManager()) {}
|
||||
Database::EnvironmentDatabase db;
|
||||
DataTypes::Environment::DataCache cache;
|
||||
Utilities::EnhancedReporter reporter;
|
||||
UINT cp;
|
||||
|
||||
/// @brief Virtools context.
|
||||
CKContext* ctx;
|
||||
/// @brief Virtools Plugin Manager
|
||||
CKPluginManager* plugin_mgr;
|
||||
};
|
||||
|
||||
static void IterateParameterOperation(ExportContext& expctx, CKParameterManager* param_mgr) {
|
||||
@@ -47,7 +52,7 @@ namespace VSW::Materializer::ExportEnvironment {
|
||||
}
|
||||
}
|
||||
|
||||
static void IterateParameter(ExportContext& expctx, CKParameterManager* param_mgr, CKPluginManager* plugin_mgr) {
|
||||
static void IterateParameter(ExportContext& expctx, CKParameterManager* param_mgr) {
|
||||
// prepare variables
|
||||
CKParameterTypeDesc* desc = nullptr;
|
||||
|
||||
@@ -74,8 +79,8 @@ namespace VSW::Materializer::ExportEnvironment {
|
||||
// This is different with plugin.
|
||||
// Because some parameters are provided by Virtools self.
|
||||
CKPluginEntry* plugin_entry = desc->CreatorDll;
|
||||
CKPluginDll* plugin_dll = plugin_mgr->GetPluginDllInfo(plugin_entry->m_PluginDllIndex);
|
||||
if (plugin_entry != nullptr) {
|
||||
CKPluginDll* plugin_dll = expctx.plugin_mgr->GetPluginDllInfo(plugin_entry->m_PluginDllIndex);
|
||||
CP_CKSTR(expctx.cache.param.dll_name, plugin_dll->m_DllFileName.CStr());
|
||||
expctx.cache.param.dll_index = plugin_entry->m_PluginDllIndex;
|
||||
expctx.cache.param.position_in_dll = plugin_entry->m_PositionInDll;
|
||||
@@ -156,7 +161,7 @@ namespace VSW::Materializer::ExportEnvironment {
|
||||
expctx.cache.plugin.reader_setting_param_guid = INT64_C(0);
|
||||
expctx.cache.plugin.reader_file_ext.clear();
|
||||
expctx.cache.plugin.behavior_guids.clear();
|
||||
expctx.cache.plugin.manager_active = FALSE;
|
||||
expctx.cache.plugin.manager_active = false;
|
||||
// then try to fetch these specific fields
|
||||
switch (plugin_type) {
|
||||
case CKPLUGIN_BITMAP_READER:
|
||||
@@ -263,12 +268,17 @@ namespace VSW::Materializer::ExportEnvironment {
|
||||
|
||||
// export environment one by one
|
||||
IterateParameterOperation(expctx, ctx->GetParameterManager());
|
||||
IterateParameter(expctx, ctx->GetParameterManager(), CKGetPluginManager());
|
||||
IterateParameter(expctx, ctx->GetParameterManager());
|
||||
IterateAttribute(expctx, ctx->GetAttributeManager());
|
||||
IteratePlugin(expctx, CKGetPluginManager());
|
||||
#if !defined(VIRTOOLS_21)
|
||||
IterateVariable(expctx, ctx->GetVariableManager());
|
||||
#endif
|
||||
|
||||
// report success
|
||||
expctx.reporter.EnableBeep();
|
||||
expctx.reporter.Info(YYCC_U8("Exporting environment database done."));
|
||||
expctx.reporter.DisableBeep();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -23,7 +23,9 @@ namespace VSW::Materializer::ExportScript {
|
||||
|
||||
/// @brief Variable for removing duplicated exported attributes.
|
||||
std::set<CK_ID> attr_set;
|
||||
/// @brief Virtools context.
|
||||
CKContext* ctx;
|
||||
/// @brief Virtools Parameter Manager
|
||||
CKParameterManager* param_mgr;
|
||||
};
|
||||
|
||||
@@ -34,6 +36,8 @@ namespace VSW::Materializer::ExportScript {
|
||||
using db_size_t = decltype(expctx.cache.data.data.length);
|
||||
if (data_length > static_cast<size_t>(std::numeric_limits<db_size_t>::max()))
|
||||
throw std::runtime_error("Too long data length when exporting to data dictionary.");
|
||||
// if length is zero, reset ptr to nullptr
|
||||
if (data_length == 0u) data = nullptr;
|
||||
// write data
|
||||
expctx.cache.data.field = field;
|
||||
expctx.cache.data.data.ptr = data;
|
||||
@@ -634,6 +638,11 @@ namespace VSW::Materializer::ExportScript {
|
||||
|
||||
// export script
|
||||
IterateScript(expctx);
|
||||
|
||||
// report success
|
||||
expctx.reporter.EnableBeep();
|
||||
expctx.reporter.Info(YYCC_U8("Exporting script database done."));
|
||||
expctx.reporter.DisableBeep();
|
||||
}
|
||||
|
||||
}
|
||||
+15
-11
@@ -5,13 +5,17 @@ namespace VSW::Materializer::Utilities {
|
||||
#pragma region Enhanced Reporter
|
||||
|
||||
EnhancedReporter::EnhancedReporter(CKContext* ctx) :
|
||||
m_Ctx(ctx) {}
|
||||
m_Ctx(ctx), m_OrderBeep(false) {}
|
||||
|
||||
EnhancedReporter::~EnhancedReporter() {}
|
||||
|
||||
void EnhancedReporter::EnableBeep() { m_OrderBeep = true; }
|
||||
|
||||
void EnhancedReporter::DisableBeep() { m_OrderBeep = false; }
|
||||
|
||||
void EnhancedReporter::PrePrint(const YYCC::yycc_char8_t* strl) const {
|
||||
if (m_Ctx != nullptr)
|
||||
m_Ctx->OutputToConsole(const_cast<CKSTRING>(YYCC::EncodingHelper::UTF8ToChar(strl, CP_ACP).c_str()), FALSE);
|
||||
m_Ctx->OutputToConsole(const_cast<CKSTRING>(YYCC::EncodingHelper::UTF8ToChar(strl, CP_ACP).c_str()), m_OrderBeep);
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
@@ -33,8 +37,8 @@ namespace VSW::Materializer::Utilities {
|
||||
// get curve control point count
|
||||
int cp_count = c->GetControlPointCount();
|
||||
// reserve enough space
|
||||
// count * (x + y + is_linear + is_tcb + tcb_tuple)
|
||||
m_Cache.reserve(static_cast<size_t>(cp_count) * (sizeof(float) * 2u + sizeof(float) * 3u + sizeof(uint32_t) + sizeof(uint32_t)));
|
||||
// count * (x + y + is_linear + is_tcb + (io_tangent_tuple / tcb_tuple))
|
||||
m_Cache.reserve(static_cast<size_t>(cp_count) * (sizeof(float) * 2u + sizeof(float) * 4u + sizeof(uint32_t) + sizeof(uint32_t)));
|
||||
|
||||
// iterate control point
|
||||
for (int i = 0; i < cp_count; ++i) {
|
||||
@@ -71,16 +75,16 @@ namespace VSW::Materializer::Utilities {
|
||||
APPEND_DATA(float_cache);
|
||||
float_cache = cp->GetBias();
|
||||
APPEND_DATA(float_cache);
|
||||
} else {
|
||||
// non-TCB control point
|
||||
float_cache = cp->GetInTangent();
|
||||
APPEND_DATA(float_cache);
|
||||
float_cache = cp->GetOutTangent();
|
||||
APPEND_DATA(float_cache);
|
||||
// To keep balance with TCB control point,
|
||||
// To keep balance with non-TCB control point,
|
||||
// We add a blank 0.0f in there
|
||||
float_cache = 0.0f;
|
||||
APPEND_DATA(float_cache);
|
||||
} else {
|
||||
// non-TCB control point
|
||||
vector_cache = cp->GetInTangent();
|
||||
APPEND_DATA(vector_cache);
|
||||
vector_cache = cp->GetOutTangent();
|
||||
APPEND_DATA(vector_cache);
|
||||
}
|
||||
|
||||
#undef APPEND_DATA
|
||||
|
||||
@@ -14,11 +14,16 @@ namespace VSW::Materializer::Utilities {
|
||||
EnhancedReporter(CKContext* ctx);
|
||||
~EnhancedReporter();
|
||||
|
||||
public:
|
||||
void EnableBeep();
|
||||
void DisableBeep();
|
||||
|
||||
protected:
|
||||
virtual void PrePrint(const YYCC::yycc_char8_t* strl) const override;
|
||||
|
||||
private:
|
||||
CKContext* m_Ctx;
|
||||
bool m_OrderBeep;
|
||||
};
|
||||
|
||||
class Curve2DBuilder {
|
||||
|
||||
Reference in new issue
Block a user