public IEnumerable <Dto> ExecuteQuery(string queryText) { var dtos = new List <Dto>(); switch (this.dialect) { case Dialect.SQL2012: case Dialect.SQL2014: // Not developed yet. throw new NotImplementedException(); case Dialect.MYSQL: using (var sqlConnection = new MySqlConnection(this.connectionString)) { MySqlDataReader rdr = null; try { sqlConnection.Open(); var cmd = new MySqlCommand(queryText, sqlConnection); rdr = cmd.ExecuteReader(); while (rdr.Read()) { //var row = Enumerable.Range(0, rdr.FieldCount).ToDictionary(rdr.GetName, rdr.GetValue); //var row = Enumerable.Range(0, rdr.FieldCount).ToDictionary(i => rdr.GetName(i), i => rdr.GetValue(i)); var dto = new Dto(); for (int i = 0; i < rdr.FieldCount; i++) { //var dotNetType = rdr.GetFieldType(i); //var sqlType = rdr.GetDataTypeName(i); //var specificType = rdr.GetProviderSpecificFieldType(i); dto.Add(rdr.GetName(i), new JValue(rdr.GetValue(i))); } dtos.Add(dto); } } finally { if (rdr != null) { rdr.Close(); } if (sqlConnection != null) { sqlConnection.Close(); } } } break; default: break; } return(dtos); }
//// Experiment 1 //public static T Extend1<T>(T target, params object[] sources) //{ // foreach (var source in sources) // { // JObject.FromObject(source).ToObject<T>(); // } // return target; //} //// Experiment 2 //public static Dto Extend2(Dto target, params Dto[] sources) //{ // foreach (var source in sources) // { // foreach (var prop in source) // { // target[prop.Key] = prop.Value; // } // } // return target; //} public static Dto Extend(Dto target, Dto source, bool onlyExistingProperties = false) { foreach (var prop in source) { if (!(onlyExistingProperties && target.ContainsKey(prop.Key))) { target[prop.Key] = prop.Value; } } return(target); }
public static bool ValidDtoKey(string entityTypeName, Dto dto, MetadataSrv.Metadata metadataSrv) { var keyNames = metadataSrv.EntityTypes[entityTypeName].Key; foreach (var name in keyNames) { if (!(dto.ContainsKey(name) || Regex.IsMatch(dto[name].ToString(), @"^\d+$"))) { return(false); } } return(true); }
public ResultSingleSerialData HandleInsertEntity(string entitySetName, Dto dto) { entitySetName = ApiProviderDtoUtils.FixEntitySetNameCase(entitySetName, this.metadataSrv); var entityTypeName = ApiProviderDtoUtils.GetEntityTypeName(entitySetName, this.metadataSrv); if (!ApiProviderDtoUtils.ValidDtoKey(entityTypeName, dto, this.metadataSrv)) { throw new DtosException(code: 400, message: "Bad Request"); } var resultSingleSerialData = this.dataViewDto.InsertItem(entityTypeName, dto); return(resultSingleSerialData); }
internal ResultSerialData FetchOne(string entityTypeName, Dto dto, string[] expand) { var keyNames = this.metadataSrv.EntityTypes[entityTypeName].Key; var queryObject = new QueryObject() { Filter = Utils.GetFilterFromKey(keyNames, dto), Expand = expand, Count = false, Top = 1 }; return(this.Fetch(entityTypeName, queryObject)); }
/** * Retrive a single entity */ public ResultSingleSerialData GetSingleItem(string entityTypeName, Dto dto, string[] expand) { var resultSerialData = this.dataAdapterRead.FetchOne(entityTypeName, dto, expand); if (resultSerialData.Items.Count() > 0) { return(resultSerialData.ToSingle()); } else { throw new DtosException(code: 404, message: "Not Found"); } }
public static bool KeyPresent(string entityTypeName, Dto dto, MetadataSrv.Metadata metadataSrv) { var keyNames = metadataSrv.EntityTypes[entityTypeName].Key; foreach (var keyName in keyNames) { if (!dto.ContainsKey(keyName)) { return(false); } } return(true); }
public static bool ValidDto(string entityTypeName, Dto key, Dto dto, MetadataSrv.Metadata metadataSrv) { var keyNames = metadataSrv.EntityTypes[entityTypeName].Key; // if dto has key fields, their values should match the key values from query string foreach (var name in keyNames) { if (dto.ContainsKey(name) && dto[name] != key[name]) { return(false); } } return(true); }
/** * Delete single entity */ public ResultSingleSerialData DeleteItem(string entityTypeName, Dto dto) { var resultSerialDataOriginal = this.dataAdapterRead.FetchOne(entityTypeName, dto, null); if (resultSerialDataOriginal.Items.Count() == 0) { throw new DtosException(code: 404, message: "Not Found"); } else { this.dataAdapterCud.DeleteEntity(entityTypeName, dto); return(resultSerialDataOriginal.ToSingle()); } }
internal static string GetFilterFromKey(string[] keyNames, Dto dto) { var result = new List <string>(); if (keyNames.Length == 0) { throw new Exception("Invalid key"); } foreach (var keyName in keyNames) { if (!dto.ContainsKey(keyName)) { throw new Exception("Key fiels not present"); } result.Add(keyName + "=" + dto[keyName]); } return(string.Join(" AND ", result)); }
/** * Insert single entity */ public ResultSingleSerialData InsertItem(string entityTypeName, Dto dto) { ResultSerialData resultSerialDataOriginal = null; if (Utils.KeyPresent(entityTypeName, dto, this.metadataSrv)) { resultSerialDataOriginal = this.dataAdapterRead.FetchOne(entityTypeName, dto, null); } if (resultSerialDataOriginal != null && resultSerialDataOriginal.Items.Count() > 0) { throw new DtosException(code: 409, message: "Conflict"); } else { var resultSerialData = this.dataAdapterCud.InsertEntity(entityTypeName, dto); return(resultSerialData.ToSingle()); } }
public ResultSerialData InsertEntity(string entityTypeName, Dto dto) { var qryFieldsNames = new List <string>(); var qryFieldsValues = new List <string>(); var tableName = metadataSrv.EntityTypes[entityTypeName].TableName; var calculatedProperties = metadataSrv.EntityTypes[entityTypeName].CalculatedProperties; var fields = metadataSrv.EntityTypes[entityTypeName].Properties.ToDictionary((it) => it.Key, (it) => it.Value.FieldName); foreach (var prop in dto) { if (!Utils.IsCalculated(calculatedProperties, prop.Key)) { qryFieldsNames.Add(fields[prop.Key]); qryFieldsValues.Add(string.Format("'{0}'", prop.Value)); } } if (qryFieldsValues.Count > 0) { var qryInsert = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", tableName, string.Join(",", qryFieldsNames), string.Join(",", qryFieldsValues)); var result = this.databaseOperations.CudQuery(qryInsert); var identityPropertyName = Utils.GetIdentityPropertyName(calculatedProperties, metadataSrv.EntityTypes[entityTypeName].Key); if (!string.IsNullOrEmpty(identityPropertyName)) { var dtonew = new Dto() { { identityPropertyName, new JValue(result) } }; return(this.dataAdapterRead.FetchOne(entityTypeName, dtonew, null)); } else { return(this.dataAdapterRead.FetchOne(entityTypeName, dto, null)); } } else { return(null); } }
public ResultSingleSerialData HandleUpdateEntity(string entitySetName, QueryParams queryParams, Dto dto) { entitySetName = ApiProviderDtoUtils.FixEntitySetNameCase(entitySetName, this.metadataSrv); var queryObject = QueryUtils.RenderQueryObject(queryParams); var entityTypeName = ApiProviderDtoUtils.GetEntityTypeName(entitySetName, this.metadataSrv); if (queryObject.Keys == null || queryObject.Keys.Count() != 1 || !ApiProviderDtoUtils.ValidKeys(entityTypeName, queryObject.Keys, this.metadataSrv)) { throw new DtosException(code: 400, message: "Bad Request"); } if (!ApiProviderDtoUtils.ValidDto(entityTypeName, queryObject.Keys.FirstOrDefault(), dto, this.metadataSrv)) { throw new DtosException(code: 400, message: "Bad Request"); } var resultSingleSerialData = this.dataViewDto.UpdateItem(entityTypeName, DalUtils.Extend(dto, queryObject.Keys.FirstOrDefault())); return(resultSingleSerialData); }