using System.Collections.Generic; using System; using System.Globalization; using System.Text; using Newtonsoft.Json.Linq; using System.Linq; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; namespace AyaNova.Biz { public static class SqlSelectBuilder { //Build the SELECT portion of a list query based on the template, mini or full and the object key in question public static string Build(string objectKey, string template, bool mini) { //parse the template var jtemplate = JObject.Parse(template); //get the fields list var objectFieldsList = ObjectFields.ObjectFieldsList(objectKey); //convert to strings array (https://stackoverflow.com/a/33836599/8939) string[] templateFieldList; if (mini) { templateFieldList = ((JArray)jtemplate["mini"]).ToObject(); } else { templateFieldList = ((JArray)jtemplate["full"]).ToObject(); } StringBuilder sb = new StringBuilder(); sb.Append("SELECT "); //Default ID column for each row (always is _df_) ObjectField def = objectFieldsList.FirstOrDefault(x => x.Key == "_df_"); if (def == null) { throw new System.ArgumentNullException($"SqlSelectBuilder: objectFieldList for key \"{objectKey}\" is missing the _df_ default field"); } sb.Append(def.SqlIdColumn); sb.Append(" AS _df_ "); foreach (string ColumnName in templateFieldList) { ObjectField o = objectFieldsList.FirstOrDefault(x => x.Key == s); if (o != null) {//Here is where we can vet the field name, if it doesn't exist though, for now we'll just ignore those ones sb.Append(","); sb.Append("{"); //Build required part of column definition sb.Append($"\"cm\":\"{o.Key}\",\"dt\":{(int)o.DataType}"); //Has a AyObjectType? (linkable / openable) if (o.AyObjectType != 0) sb.Append($",\"ay\":{(int)o.AyObjectType}"); sb.Append("}"); } } return sb.ToString(); } }//eoc }//ens