예제 #1
0
 public async Task ImportEntity(INightFluxEntity record)
 {
     BatchEntities.Enqueue(record);
     if (BatchEntities.Count >= 1024)
     {
         await EmptyQueue();
     }
 }
예제 #2
0
        //public async Task RemoveDuplicateCarbs()
        //{
        //    using var conn = await GetConnection();
        //    var duplicateIds = new List<long>();
        //    await foreach (var dr in ExecuteQuery("SELECT import_id, COUNT(*) FROM carb GROUP BY import_id HAVING COUNT(*) > 1", null, conn))
        //    {
        //        var importId = dr.GetString(0);
        //        var duplicateCount = dr.GetInt64(1) - 1;
        //        await foreach (var rowInfo in ExecuteQuery("SELECT rowid FROM carb WHERE import_id = @i ORDER BY time DESC LIMIT @k",
        //            new [] { GetParameter("i", importId), GetParameter("k", duplicateCount) }, conn))
        //        {
        //            duplicateIds.Add(rowInfo.GetInt64(0));
        //        }
        //    }

        //    using var tran = await conn.BeginTransactionAsync();
        //    foreach(var duplicateId in duplicateIds)
        //    {
        //        await ExecuteNonQuery("DELETE FROM carb WHERE rowid = @d",
        //            new [] { GetParameter("d", duplicateId) }, conn);
        //    }
        //    await tran.CommitAsync();
        //}

        private async Task InsertEntity(INightFluxEntity iv, IDbTransaction transaction)
        {
            try
            {
                if (iv is BgValue bgValue)
                {
                    await Connection.ExecuteAsync("INSERT OR REPLACE INTO bg(time,value) VALUES(@A,@B)", new
                    {
                        A = bgValue.Time.ToUnixTimeMilliseconds(),
                        B = bgValue.Value
                    }, transaction);
                }
                //else if (iv is BasalProfile)
                //{
                //    await ImportProfile((BasalProfile) iv);
                //}
                //else if (iv is TempBasal)
                //{
                //    await ImportTempBasal((TempBasal) iv);
                //}
                //else if (iv is Bolus)
                //{
                //    await ImportBolus((Bolus) iv);
                //}
                //else if (iv is Carb)
                //{
                //    await ImportCarb((Carb) iv);
                //}
                //else if (iv is ExtendedBolus)
                //{
                //    await ImportExtendedBolus((ExtendedBolus) iv);
                //}
                else if (iv is InfusionDelivery infusionRate)
                {
                    await Connection.ExecuteAsync("INSERT OR REPLACE INTO oc_infusion(time, site_id, rate) VALUES(@A,@B,@C)", new
                    {
                        A = infusionRate.Time.ToUnixTimeMilliseconds(),
                        B = infusionRate.SiteId,
                        C = infusionRate.Delivered
                    }, transaction);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"Error importing entity {iv}\n{e}");
            }
        }