예제 #1
0
        /// <summary>
        /// required teting
        /// </summary>
        /// <param name="dbSchema"></param>
        /// <param name="objectName"></param>
        /// <returns></returns>
        private async Task <JMXSchema> SyncSchemaAsync(JMXObjectName objectName)
        {
            MdbContext mdb    = Factory.GetMdbContext();
            ILogger    log    = this.Logger;
            var        schema = await _schemaRepo.GetSchemaAsync(objectName);

            //schema was syncronized
            //change this logic
            if (schema.SyncState == 1)
            {
                return(schema);
            }

            foreach (var o in GetDependences(schema))
            {
                await SyncSchemaAsync(o);
            }

            var schemaFromDb = await GetObjectSchemaAsync(schema.DbObjectName.ToString());

            bool createNew = (schemaFromDb == null);

            string[] sqlList;
            if (createNew)
            {
                sqlList = CreateNewStatements(schema);
            }
            else
            {
                // Compare with previos version of schema
                // error schema not found if db objects exists, but
                // synced version schema don't exists
                //var prevSchema = await GetSchemaInternalAsync(mdb, dbSchema, objectName, 1);
                //!!! not tested
                var prevSchema = schemaFromDb;
                sqlList = await CompareSchemasAsync(schema, prevSchema);
            }

            await mdb.BeginTransactionAsync();

            try
            {
                foreach (var sql in sqlList)
                {
                    log.LogDebug(sql);
                    await mdb.ExecuteAsync(sql);
                }
                schema = await _schemaRepo.SetSchemaStateAsync(schema.ObjectName, 1);

                await mdb.CommitAsync();
            }
            catch
            {
                mdb.RollBack();
                throw;
            }
            return(schema);
        }
예제 #2
0
        public async Task DropSchemaAsync(string objectName)
        {
            JMXObjectName name = objectName;

            using (var mdb = await MdbContext.CreateMdbContextAsync(_cn).ConfigureAwait(false))
            {
                await _syncronizer.DropSchemaAsync(mdb, name.AreaName, name.ObjectName).ConfigureAwait(false);
            }
            lock (objLock)
                _schemaCache.Remove(name.ToString());
        }
예제 #3
0
        public override async Task DeleteSchemaAsync(string objectName)
        {
            JMXObjectName name   = objectName;
            MdbContext    mdb    = Factory.GetMdbContext();
            var           schema = await GetSchemaAsync(mdb, name.AreaName, name.ObjectName);

            await mdb.ExecuteAsync(SQLite.DelSysSchemas,
                                   new MdbParameter("@ID", schema.ID));

            _schemaCache.Remove(name.ToString());
        }
예제 #4
0
        public async virtual Task DeleteAsync(JMXObjectName objectName, long id)
        {
            JMXObject jo = await ReadAsync(objectName, id);

            if (jo == null)
            {
                throw new InvalidOperationException(Properties.Strings.S031_MetaStack_Core_ORM_JMXProvider_ObjectNotFound
                                                    .ToFormat(objectName, id));
            }
            await DeleteAsync(jo);
        }
예제 #5
0
        public async Task <JMXSchema> SyncSchemaAsync(string objectName)
        {
            JMXObjectName name = objectName;

            using (var mdb = await MdbContext.CreateMdbContextAsync(_cn).ConfigureAwait(false))
            {
                var schema = await _syncronizer.SyncSchemaAsync(mdb, name.AreaName, name.ObjectName).ConfigureAwait(false);

                lock (objLock)
                    _schemaCache[schema.ObjectName] = schema;
                return(schema);
            }
        }
예제 #6
0
        public override async Task <JMXSchema> GetSchemaAsync(string objectName)
        {
            JMXObjectName name = objectName;

            if (_schemaCache.TryGetValue(name, out JMXSchema schema))
            {
                schema.SchemaRepo = this;
                return(schema);
            }
            schema = await GetSchemaAsync(Factory.GetMdbContext(), name.AreaName, name.ObjectName)
                     .ConfigureAwait(false);

            _schemaCache.TryAdd(name, schema);
            return(schema);
        }
예제 #7
0
        public override async Task <JMXObject> ReadAsync(JMXObjectName objectName, long id)
        {
            JMXObject o = new JMXObject(objectName, Factory);

            if (!_statementsCache.TryGetValue(objectName, out string sql))
            {
                sql = GetReadStatement(o);
                _statementsCache.TryAdd(objectName, sql);
            }

            var mdb = Factory.GetMdbContext();
            var drs = await mdb.GetReadersAsync(sql);

            for (int i = 0; i < drs.Length; i++)
            {
                var dr = drs[i];
                dr.Dispose();
            }
            return(o);
        }
예제 #8
0
        public async Task <JMXSchema> GetSchemaAsync(string objectName)
        {
            JMXObjectName name = objectName;

            if (_schemaCache.TryGetValue(name, out JMXSchema schema))
            {
                schema.SchemaProvider = this;
                return(schema);
            }
            using (var mdb = await MdbContext.CreateMdbContextAsync(_cn).ConfigureAwait(false))
            {
                schema = await _syncronizer.GetSchemaAsync(mdb, name.AreaName, name.ObjectName).ConfigureAwait(false);

                lock (objLock)
                {
                    if (!_schemaCache.ContainsKey(name))
                    {
                        _schemaCache.Add(name, schema);
                    }
                }
            }
            return(schema);
        }
예제 #9
0
 public virtual Task <JMXObject> ReadAsync(JMXObjectName objectName, string alterKeyIndexName, params object[] parameters)
 {
     throw new NotImplementedException();
 }
예제 #10
0
 public virtual Task <JMXObject> ReadAsync(JMXObjectName objectName, long id)
 {
     throw new NotImplementedException();
 }
예제 #11
0
 public virtual JMXObject Read(JMXObjectName objectName, long id)
 {
     throw new NotImplementedException();
 }
예제 #12
0
 public virtual void Delete(JMXObjectName objectName, long id)
 => DeleteAsync(objectName, id).GetAwaiter().GetResult();
예제 #13
0
 public override JMXObject Read(JMXObjectName objectName, long id)
 => ReadAsync(objectName, id)
 .GetAwaiter()
 .GetResult();
예제 #14
0
 public JMXObject Read(JMXObjectName objectName, string alternameIndexName, params object[] parameters)
 {
     throw new NotImplementedException();
 }
예제 #15
0
 public Task DeleteAsync(JMXObjectName objectName, long id)
 {
     throw new NotImplementedException();
 }
예제 #16
0
 public void Delete(JMXObjectName objectName, long id)
 {
     throw new NotImplementedException();
 }