Example #1
0
        public static IQuery GetGetRevisionQuery(IRevisionKey revisionKey)
        {
            ArgumentUtility.CheckNotNull("revisionKey", revisionKey);

            var storageProviderDefinition = GetStorageProviderDefinition();
            var sqlDialect = storageProviderDefinition.Factory.CreateSqlDialect(storageProviderDefinition);

            var parameters = new QueryParameterCollection();

            var statement = new StringBuilder();

            statement.Append("SELECT ");
            statement.Append(GetRevisionValueColumnIdentifier(sqlDialect));
            statement.Append(" FROM ");
            statement.Append(GetRevisionTableIdentifier(sqlDialect));
            statement.Append(" WHERE (");
            AppendKeyClause(statement, parameters, revisionKey, sqlDialect);
            statement.Append(")");
            statement.Append(sqlDialect.StatementDelimiter);

            return(QueryFactory.CreateQuery(
                       new QueryDefinition(
                           typeof(Revision) + "." + MethodBase.GetCurrentMethod().Name,
                           storageProviderDefinition,
                           statement.ToString(),
                           QueryType.Scalar),
                       parameters));
        }
Example #2
0
        private void IncrementRevision(IDbConnection connection, IDbTransaction transaction, IRevisionKey revisionKey)
        {
            var query = Revision.GetIncrementRevisionQuery(revisionKey);

            Assertion.IsTrue(query.QueryType == QueryType.Scalar);
            using (var command = CreateCommandFromQuery(connection, transaction, query))
            {
                command.ExecuteNonQuery();
            }
        }
Example #3
0
        public static IQuery GetIncrementRevisionQuery(IRevisionKey revisionKey)
        {
            ArgumentUtility.CheckNotNull("revisionKey", revisionKey);

            var storageProviderDefinition = GetStorageProviderDefinition();
            var sqlDialect = storageProviderDefinition.Factory.CreateSqlDialect(storageProviderDefinition);

            const string incrementrevision          = "IncrementRevision";
            string       revisionTable              = GetRevisionTableIdentifier(sqlDialect);
            string       revisionValueColumn        = GetRevisionValueColumnIdentifier(sqlDialect);
            string       revisionValueParameter     = sqlDialect.GetParameterName("value");
            string       revisionGlobalKeyParameter = sqlDialect.GetParameterName("globalKey");
            string       revisionLocalKeyParameter  = sqlDialect.GetParameterName("localKey");

            var parameters = new QueryParameterCollection();

            var statement = new StringBuilder();

            statement.Append("BEGIN TRANSACTION " + incrementrevision);
            statement.Append(sqlDialect.StatementDelimiter);
            statement.AppendLine();
            statement.Append("IF EXISTS (SELECT 0 FROM ");
            statement.Append(revisionTable);
            statement.Append(" WHERE (");
            AppendKeyClause(statement, parameters, revisionKey, sqlDialect);
            statement.Append(")");
            statement.Append(")");
            statement.AppendLine();

            statement.Append("UPDATE ");
            statement.Append(revisionTable);
            statement.Append(" SET ");
            statement.Append(revisionValueColumn);
            statement.Append(" = ");
            statement.Append(revisionValueParameter);
            statement.Append(" WHERE (");
            AppendKeyClause(statement, parameters, revisionKey, sqlDialect);
            statement.Append(")");
            statement.AppendLine();

            statement.Append("ELSE");
            statement.AppendLine();

            statement.Append("INSERT INTO ");
            statement.Append(revisionTable);
            statement.Append("(");
            statement.Append(GetRevisionGlobalKeyColumnIdentifier(sqlDialect));
            statement.Append(",");
            statement.Append(GetRevisionLocalKeyColumnIdentifier(sqlDialect));
            statement.Append(",");
            statement.Append(revisionValueColumn);
            statement.Append(") VALUES (");
            statement.Append(parameters[revisionGlobalKeyParameter].Name);
            statement.Append(",");
            statement.Append(parameters[revisionLocalKeyParameter].Name);
            statement.Append(",");
            statement.Append(revisionValueParameter);
            statement.Append(")");
            statement.Append(sqlDialect.StatementDelimiter);
            statement.AppendLine();
            statement.Append("COMMIT TRANSACTION " + incrementrevision);
            statement.Append(sqlDialect.StatementDelimiter);
            statement.AppendLine();

            parameters.Add(revisionValueParameter, Guid.NewGuid());

            return(QueryFactory.CreateQuery(
                       new QueryDefinition(
                           typeof(Revision) + "." + MethodBase.GetCurrentMethod().Name,
                           storageProviderDefinition,
                           statement.ToString(),
                           QueryType.Scalar),
                       parameters));
        }
Example #4
0
        private static void AppendKeyClause(StringBuilder statement, QueryParameterCollection parameters, IRevisionKey key, ISqlDialect sqlDialect)
        {
            string revisionGlobalKeyColumn    = GetRevisionGlobalKeyColumnIdentifier(sqlDialect);
            string revisionLocalKeyColumn     = GetRevisionLocalKeyColumnIdentifier(sqlDialect);
            string revisionGlobalKeyParameter = sqlDialect.GetParameterName("globalKey");
            string revisionLocalKeyParameter  = sqlDialect.GetParameterName("localKey");

            statement.Append(revisionGlobalKeyColumn);
            statement.Append(" = ");
            statement.Append(revisionGlobalKeyParameter);
            if (!parameters.Contains(revisionGlobalKeyParameter))
            {
                parameters.Add(new QueryParameter(revisionGlobalKeyParameter, key.GlobalKey));
            }

            statement.Append(" AND ");
            statement.Append(revisionLocalKeyColumn);
            if (string.IsNullOrEmpty(key.LocalKey))
            {
                statement.Append(" IS NULL");
                if (!parameters.Contains(revisionLocalKeyParameter))
                {
                    parameters.Add(new QueryParameter(revisionLocalKeyParameter, null));
                }
            }
            else
            {
                statement.Append(" = ");
                statement.Append(revisionLocalKeyParameter);
                if (!parameters.Contains(revisionLocalKeyParameter))
                {
                    parameters.Add(new QueryParameter(revisionLocalKeyParameter, key.LocalKey));
                }
            }
        }