public List <QueryMetadata> GetColumns(string tableName)
        {
            var result = MacheteAdoContext.getMetadata($"select top 0 * from {tableName}", _readonlyConnectionString);

            result.ForEach(c => c.include = true);
            return(result);
        }
        public List <string> Validate(string query)
        {
            // because query definition doesn't contain the parameters
            // and the goal is only to return query errors to UI
            string vars      = @"DECLARE @beginDate Date
SET @beginDate = '2021-01-01'
DECLARE @endDate Date
SET @endDate = '2022-01-01'
DECLARE @dwccardnum int
SET @dwccardnum = 10000
";
            string fullQuery = string.Concat(vars, query);
            var    result    = MacheteAdoContext.ValidateQuery(fullQuery, _readonlyConnectionString).ToList();

            return(result);
        }
        public List <dynamic> GetDynamicQuery(int id, SearchOptions o)
        {
            ReportDefinition     report = dbset.Single(a => a.ID == id);
            List <QueryMetadata> meta   = MacheteAdoContext.getMetadata(report.sqlquery, _readonlyConnectionString);
            Type       queryType        = ILVoodoo.buildQueryType(meta);
            MethodInfo method           = Type.GetType("Machete.Service.MacheteAdoContext")
                                          .GetMethod("SqlQuery", new[] { typeof(string), typeof(string), typeof(SqlParameter[]) });
            MethodInfo man   = method.MakeGenericMethod(queryType);
            var        blarg = new List <SqlParameter>()
            {
                new SqlParameter {
                    ParameterName = "beginDate", Value = o.beginDate
                },
                new SqlParameter {
                    ParameterName = "endDate", Value = o.endDate
                }
            };

            if (o.dwccardnum != null)
            {
                blarg.Add(new SqlParameter {
                    ParameterName = "dwccardnum", Value = o.dwccardnum
                });
            }
            dynamic dynamicQuery = man.Invoke(null, new object[] {
                report.sqlquery,
                _readonlyConnectionString,
                blarg.ToArray <SqlParameter>()
            });

            var dynamicList = new List <dynamic>();

            foreach (var row in dynamicQuery)
            {
                dynamicList.Add(row);
            }

            return(dynamicList);
        }
 private string GetJsonColumns(string query)
 {
     return(MacheteAdoContext.getUIColumnsJson(query, _readonlyConnectionString));
 }
 public DataTable GetDataTable(string query)
 {
     // https://stackoverflow.com/documentation/epplus/8223/filling-the-document-with-data
     return(MacheteAdoContext.Fill(query, _readonlyConnectionString));
 }