示例#1
0
        public async Task ExecuteCreateStatement(string createStatement)
        {
            var tokens = _creationalLexicalTokenizer.Tokenize(createStatement);
            var model  = (CreationModel)_creationalParser.ParseTokens(tokens);

            await CreateEntity(model.EntityName, model.Properties);
        }
        public async Task <IEnumerable <IDictionary <string, string> > > ExecuteSelectStatement(string selectStatement)
        {
            var tokens            = _projectionalTokenizer.Tokenize(selectStatement);
            var projectionalModel = (ProjectionModel)_projectionalParser.ParseTokens(tokens);
            var queryResult       = await _queryEngine.QueryEntities(projectionalModel.EntityName, projectionalModel.Query);

            var result = new List <IDictionary <string, string> >();

            foreach (var item in queryResult)
            {
                var dictionary = new Dictionary <string, string>();

                foreach (var prop in item)
                {
                    var name = prop.Name;

                    if (!projectionalModel.ProjectAllProperties && projectionalModel.ProjectedProperties.All(x => !string.Equals(x, name, StringComparison.OrdinalIgnoreCase)))
                    {
                        continue;
                    }

                    var value = (prop as IEnumerable <dynamic>)?.FirstOrDefault()?.Value;

                    if (value != null && !dictionary.TryGetValue(name, out string _))
                    {
                        dictionary.Add(name, value.ToString());
                    }
                }

                result.Add(dictionary);
            }
            return(result);
        }
示例#3
0
        public async Task ExecuteDeleteStatement(string statement)
        {
            var tokens = _deletionLexicalTokenizer.Tokenize(statement);
            var model  = (DeletionModel)_deletionParser.ParseTokens(tokens);
            var keys   = await _queryEngine.GetEntityKeys(model.EntityName, model.WhereCondition);

            await DeleteAllKeys(model.EntityName, keys);
        }
        public async Task ExecuteInsertStatement(string statement)
        {
            var tokens     = _insertionLexer.Tokenize(statement);
            var model      = (InsertionModel)_insertionParser.ParseTokens(tokens);
            var identifier = Helpers.GenerateRandomString();
            var entity     = await EncodeEntity(model.EntityName, identifier, model.PropertyValues);

            await AddEntityToStore(model.EntityName, identifier, entity);
        }
示例#5
0
        public async Task ExecuteUpdateStatement(string sql)
        {
            var tokens      = _updateLexicalTokenizer.Tokenize(sql);
            var model       = (UpdateModel)_updateParser.ParseTokens(tokens);
            var updatedKeys = await _queryEngine.GetEntityKeys(model.EntityName, model.WhereCondition);

            foreach (var key in updatedKeys)
            {
                var entityStoreKey = Helpers.GetEntityStoreKey(model.EntityName, key);
                var encodedEntity  = await _stringClient.GetValue(entityStoreKey);

                var entity = JsonConvert.DeserializeObject <dynamic>(encodedEntity);
                await UpdateWeakEntity(entity, model.UpdatedProperties, model.EntityName, key);
            }
        }