Пример #1
0
        public static async Task InsertOrUpdate(MySqlConnection connection, OTContract otContract, bool onlyAllowIsLatestUpdate = false)
        {
            if (otContract.Address == null || otContract.Address == "0x0000000000000000000000000000000000000000")
            {
                return;
            }

            var count = await connection.QueryFirstOrDefaultAsync <Int32>("SELECT COUNT(*) FROM OTContract WHERE Address = @address AND Type = @type AND BlockchainID = @blockchainID", new
            {
                address      = otContract.Address,
                type         = otContract.Type,
                blockchainID = otContract.BlockchainID
            });

            if (otContract.IsLatest)
            {
                otContract.IsArchived = false;
            }

            if (count == 0)
            {
                Console.WriteLine("Inserting " + otContract.Address + ". Type: " + (ContractTypeEnum)otContract.Type);

                await Insert(connection, otContract);
            }
            else
            {
                await Update(connection, otContract, onlyAllowIsLatestUpdate, false);
            }
        }
Пример #2
0
        public static async Task Update(MySqlConnection connection, OTContract contract, bool onlyAllowIsLatestUpdate, bool onlyAllowIsArchivedUpdate)
        {
            if (onlyAllowIsArchivedUpdate)
            {
                await connection.ExecuteAsync("UPDATE OTContract SET IsArchived = @IsArchived WHERE Address = @address AND BlockchainID = @blockchainID", new
                {
                    address      = contract.Address,
                    IsArchived   = contract.IsArchived,
                    blockchainID = contract.BlockchainID
                });
            }
            else if (onlyAllowIsLatestUpdate)
            {
                await connection.ExecuteAsync("UPDATE OTContract SET IsLatest = @isLatest WHERE Address = @address AND BlockchainID = @blockchainID", new
                {
                    address      = contract.Address,
                    isLatest     = contract.IsLatest,
                    blockchainID = contract.BlockchainID
                });
            }
            else
            {
                if (contract.IsLatest)
                {
                    await connection.ExecuteAsync(@"UPDATE OTContract
SET IsLatest = 0
WHERE Type = @type AND IsLatest = 1 AND Address != @address AND BlockchainID = @blockchainID", new
                    {
                        address      = contract.Address,
                        type         = contract.Type,
                        blockchainID = contract.BlockchainID
                    });
                }

                await connection.ExecuteAsync(@"UPDATE OTContract SET Type = @type, IsLatest = @isLatest, FromBlockNumber = @fromBlockNo, SyncBlockNumber = @syncBlockNo,
IsArchived = @IsArchived, LastSyncedTimestamp = @LastSyncedTimestamp, BlockchainID = @blockchainID
WHERE Address = @address and type = @type AND BlockchainID = @blockchainID", new
                {
                    address             = contract.Address,
                    type                = contract.Type,
                    isLatest            = contract.IsLatest,
                    fromBlockNo         = contract.FromBlockNumber,
                    syncBlockNo         = contract.SyncBlockNumber,
                    IsArchived          = contract.IsArchived,
                    LastSyncedTimestamp = contract.LastSyncedTimestamp,
                    blockchainID        = contract.BlockchainID
                });
            }
        }
Пример #3
0
 public static async Task Insert(MySqlConnection connection, OTContract contract)
 {
     await connection.ExecuteAsync("INSERT INTO OTContract(Address, Type, IsLatest, FromBlockNumber, SyncBlockNumber, ToBlockNumber, IsArchived, LastSyncedTimestamp, BlockchainID) VALUES(@address, @type, @isLatest, @fromBlockNo, @syncBlockNo, @toBlockNo, @IsArchived, @LastSyncedTimestamp, @BlockchainID)",
                                   new
     {
         address             = contract.Address,
         type                = contract.Type,
         isLatest            = contract.IsLatest,
         fromBlockNo         = contract.FromBlockNumber,
         syncBlockNo         = contract.SyncBlockNumber,
         toBlockNo           = (ulong?)null,
         IsArchived          = contract.IsArchived,
         LastSyncedTimestamp = contract.LastSyncedTimestamp,
         BlockchainID        = contract.BlockchainID
     });
 }