Esempio n. 1
0
        async Task <(string DbSchema, string ObjectName, JObject ObjectSchema)> getSchemaAsync(string objectName)
        {
            string dbSchema = _defaultDbSchema;
            int    pos      = objectName.IndexOf('.');
            string key;

            if (pos > -1)
            {
                key        = objectName;
                dbSchema   = objectName.Left(pos - 1);
                objectName = objectName.Substring(pos + 1);
            }
            else
            {
                key = $"{dbSchema}.{objectName}";
            }

            if (!_schemaCache.TryGetValue(key, out var objectSchema))
            {
                string sch = await _mdb.ExecuteAsync <string>($"select ObjectSchema from SysCat.V_SysSchemas where SchemaName = '{dbSchema}' and " +
                                                              $"ObjectName = '{objectName}'");

                if (sch.IsEmpty())
                {
                    //object schema not found in database
                    throw new KeyNotFoundException(Translater.GetTranslate("S031.MetaStack.Core.SysCat.SysCatManager.getSchema.1", key));
                }
                objectSchema = JObject.Parse(sch);
                lock (objLock)
                    _schemaCache.Add(key, objectSchema);
            }
            return(dbSchema, objectName, objectSchema);
        }