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); }
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); }
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); } }