예제 #1
0
        private static bool VersionAlreadyApplied(FbConnection connection, int version)
        {
            bool alreadyApplied = false;

            bool tableExists = Convert.ToBoolean(connection.ExecuteScalar(@"SELECT count(*) FROM rdb$relations where rdb$relation_name = 'HANGFIRE.SCHEMA';"));

            if (tableExists)
            {
                alreadyApplied = Convert.ToBoolean(connection.ExecuteScalar(string.Format(@"SELECT 1 FROM ""HANGFIRE.SCHEMA"" WHERE ""VERSION"" = {0};", version)));
            }

            return(alreadyApplied);
        }
예제 #2
0
        public int GetTablePK(string tblName)
        {
            int pk = 0;

            using (IDbConnection connection = new FbConnection(connectionString))
            {
                pk = connection.ExecuteScalar <int>($"select ID from Get_PK('{tblName}')");
            }
            return(pk);
        }
예제 #3
0
        public int GetPK()
        {
            int pk = 0;

            using (IDbConnection connection = new FbConnection(connectionString))
            {
                pk = connection.ExecuteScalar <int>($"select ID from Get_PK");
            }
            return(pk);
        }
예제 #4
0
        public string CreateExpiredJob(
            Job job,
            IDictionary <string, string> parameters,
            DateTime createdAt,
            TimeSpan expireIn)
        {
            if (job == null)
            {
                throw new ArgumentNullException("job");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            string createJobSql = string.Format(@"INSERT INTO ""{0}.JOB"" (invocationdata, arguments, createdat, expireat) 
                VALUES (@invocationData, @arguments, @createdAt, @expireAt)
                RETURNING id;", _options.Prefix);

            var invocationData = InvocationData.Serialize(job);

            var jobId = _connection.ExecuteScalar <int>(
                createJobSql,
                new
            {
                invocationData = JobHelper.ToJson(invocationData),
                arguments      = invocationData.Arguments,
                createdAt      = createdAt,
                expireAt       = createdAt.Add(expireIn)
            }).ToString();

            if (parameters.Count > 0)
            {
                var parameterArray = new object[parameters.Count];
                int parameterIndex = 0;
                foreach (var parameter in parameters)
                {
                    parameterArray[parameterIndex++] = new
                    {
                        jobId = Convert.ToInt32(jobId, CultureInfo.InvariantCulture),
                        name  = parameter.Key,
                        value = parameter.Value
                    };
                }

                string insertParameterSql = string.Format(@"INSERT INTO ""{0}.JOBPARAMETER"" (jobid, name, ""VALUE"")
                    VALUES (@jobId, @name, @value);", _options.Prefix);

                _connection.Execute(insertParameterSql, parameterArray);
            }

            return(jobId);
        }
        private static int CreateExpirationEntry(FbConnection connection, FirebirdStorageOptions options, DateTime?expireAt)
        {
            string insertSqlNull = @"
                INSERT INTO """ + options.Prefix + @".COUNTER"" (""KEY"", ""VALUE"", expireat)
                VALUES ('key', 1, null) 
                RETURNING id;";

            string insertSqlValue = @"
                INSERT INTO """ + options.Prefix + @".COUNTER"" (""KEY"", ""VALUE"", expireat) 
                VALUES ('key', 1, DATEADD(second, {0:N5}, " + string.Format(CultureInfo.InvariantCulture, @"DATEADD(minute, -{0:N5}*60, current_timestamp))) ", options.UtcOffset) +
                                    "RETURNING id;";

            string insertSql = expireAt == null ? insertSqlNull : string.Format(insertSqlValue, ((long)(expireAt.Value - DateTime.UtcNow).TotalSeconds).ToString(CultureInfo.InvariantCulture));

            var recordId = connection.ExecuteScalar <int>(insertSql);

            return(recordId);
        }