diff --git a/uppsrc/Sql/Sqlexp.h b/uppsrc/Sql/Sqlexp.h index 09475dbfa..275ac9feb 100644 --- a/uppsrc/Sql/Sqlexp.h +++ b/uppsrc/Sql/Sqlexp.h @@ -54,7 +54,8 @@ void td_array(SqlSet& set, const String& prefix, const char *x, int cnt); void td_var(SqlSet& set, const String& prefix, const char *x, SqlSet (*f)(const String&)); void td_shrink(String *array, int cnt); -bool EqualFields(Fields a, Fields b); +bool EqualFields(Fields a, Fields b); +String AsString(Fields a); // ---------- diff --git a/uppsrc/Sql/sch_header.h b/uppsrc/Sql/sch_header.h index c09fa02d7..33446178b 100644 --- a/uppsrc/Sql/sch_header.h +++ b/uppsrc/Sql/sch_header.h @@ -14,6 +14,7 @@ public:\ operator Fields() { return callback(this, &S_##Table::FieldLayout); } \ bool operator==(const S_##Table& x) const { return EqualFields(const_cast(*this), const_cast(x)); } \ bool operator!=(const S_##Table& x) const { return !EqualFields(const_cast(*this), const_cast(x)); } \ + String ToString() const { return AsString((Fields)const_cast(*this)); } \ S_##Table(); #define TYPE(Table) CODETYPE(Table, __NIL) diff --git a/uppsrc/Sql/util_td.cpp b/uppsrc/Sql/util_td.cpp index 5551c667a..0d428a81f 100644 --- a/uppsrc/Sql/util_td.cpp +++ b/uppsrc/Sql/util_td.cpp @@ -40,4 +40,20 @@ bool EqualFields(Fields a, Fields b) return fa.table == fb.table && fa.va == fb.va; } +struct NfAsString : FieldOperator { + String text; + + virtual void Field(const char *name, Ref f) { + text << "\n\t" << name << '=' << (Value)f; + } +}; + + +String AsString(Fields a) +{ + NfAsString x; + a(x); + return x.text; +} + END_UPP_NAMESPACE diff --git a/uppsrc/Web/init b/uppsrc/Web/init index ae66929f1..c353011bd 100644 --- a/uppsrc/Web/init +++ b/uppsrc/Web/init @@ -1,7 +1,7 @@ #ifndef _Web_icpp_init_stub #define _Web_icpp_init_stub #include "Core/init" -#define BLITZ_INDEX__ F6F37DAE5668E45571942689ACEE874C1 +#define BLITZ_INDEX__ FD64686542F64128888522171727B4F79 #include "Web_init.icpp" #undef BLITZ_INDEX__ #endif