From edfb15fcfdba238b24f2c451acfa4e9051fbe42d Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 13 Oct 2014 07:07:56 +0000 Subject: [PATCH] MSSQL: MsSqlSequence git-svn-id: svn://ultimatepp.org/upp/trunk@7772 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/MSSQL/MSSQL.cpp | 14 ++++++++++++++ uppsrc/MSSQL/MSSQL.h | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/uppsrc/MSSQL/MSSQL.cpp b/uppsrc/MSSQL/MSSQL.cpp index d38b86596..2340c8bc3 100644 --- a/uppsrc/MSSQL/MSSQL.cpp +++ b/uppsrc/MSSQL/MSSQL.cpp @@ -20,4 +20,18 @@ void IdentityInsert(const SqlInsert& ins) IdentityInsert(SQL, ins); } +Value MsSqlSequence::Get() +{ +#ifndef NOAPPSQL + Sql sql(session ? *session : SQL.GetSession()); +#else + ASSERT(session); + Sql sql(*session); +#endif + if(!sql.Execute("select next value for " + ~seq) || !sql.Fetch()) + return ErrorValue(); + return sql[0]; +} + + }; diff --git a/uppsrc/MSSQL/MSSQL.h b/uppsrc/MSSQL/MSSQL.h index 024b1f56a..cd1e15be4 100644 --- a/uppsrc/MSSQL/MSSQL.h +++ b/uppsrc/MSSQL/MSSQL.h @@ -19,6 +19,27 @@ bool MSSQLPerformScript(const String& text, StatementExecutor& executor, void IdentityInsert(Sql& sql, const SqlInsert& ins); void IdentityInsert(const SqlInsert& ins); +class MsSqlSequence : public ValueGen { + SqlId seq; + SqlSession *session; + +public: + virtual Value Get(); + + Value operator++() { return Get(); } + + void Set(SqlId id, SqlSession& s) { seq = id; session = &s; } + +#ifndef NOAPPSQL + void Set(SqlId id) { seq = id; session = NULL; } + + MsSqlSequence(SqlId seq) { Set(seq); } +#endif + MsSqlSequence(SqlId seq, SqlSession& s) { Set(seq, s); } + + MsSqlSequence() { session = NULL; } +}; + }; #endif