コード例 #1
0
 public void SelectContextTest()
 {
   var sql = @"select 1 + 3 count
               , tr.minor_rev
             from innovator.[transaction_request] tr
             inner join innovator.[Part_bom] pb
             on pb.source_id = tr.part
             inner join (
               select id, stuff, another
               from innovar.part
             ) d
             on d.id = pb.relate_id
             group by id, config_id, major_rev";
   var parsed = new SqlTokenizer(sql).Parse();
   var context = new SqlContext(parsed);
   Assert.AreEqual(3, context.Tables.Count());
 }
コード例 #2
0
 public void SelectColumnNamesSubSelectTest()
 {
   var sql = @"select *
             from (
               select count, non_null_id, b.*
               from a
               inner join (
                 select first, second, third
                 from another
               ) b
               on a.thing = b.stuff
             ) d
             group by id, config_id, major_rev";
   var parsed = new SqlTokenizer(sql).Parse();
   var correct = new string[] { "count", "non_null_id", "first", "second", "third" };
   var ctx = new SqlContext(parsed);
   var names = ctx.Tables.Single().Columns.ToArray();
   CollectionAssert.AreEqual(correct, names);
 }
コード例 #3
0
 public void SelectColumnNamesSubSelectNoNameTest()
 {
   var sql = @"select *, 1 + 2 count
             from (
               select *
               from (
                 select *, 3 + 4 thing
                 from another
               ) b
             ) d
             group by id, config_id, major_rev";
   var parsed = new SqlTokenizer(sql).Parse();
   var ctx = new SqlContext(parsed);
   var names = ctx.Tables.Single().Columns.ToArray();
   //CollectionAssert.AreEqual(correct, names);
 }
コード例 #4
0
    private void ProcessGroup(SqlTableInfo info, SqlGroup group)
    {
      if (group == null) return;

      var cols = group.GetColumnNames().ToList();
      var toRemove = cols.Where(c => c.EndsWith("*")).ToArray();
      if (toRemove.Any(c => c == "*"))
      {
        var ctx = new SqlContext(group);
        cols.AddRange(ctx.Tables.Where(t => t.Columns != null).SelectMany(t => t.Columns));
        info.AdditionalColumns = ctx.Tables.Where(t => t.Columns == null && t.Name != null)
          .Concat(ctx.Tables.Where(t => t.AdditionalColumns != null).SelectMany(t => t.AdditionalColumns)).ToArray();
      }
      else if (cols.Any(c => c.EndsWith("*")))
      {
        var ctx = new SqlContext(group);
        var additional = new List<SqlTableInfo>();
        SqlTableInfo colInfo;
        foreach (var col in toRemove.Select(c => c.TrimEnd('.', '*')))
        {
          if (ctx.TryByName(col, out colInfo))
          {
            if (colInfo.Columns == null)
            {
              additional.Add(colInfo);
            }
            else
            {
              cols.AddRange(colInfo.Columns);
            }
          }
        }
        info.AdditionalColumns = additional;
      }

      foreach (var item in toRemove)
      {
        cols.Remove(item);
      }
      if (cols.Any())
        info.Columns = cols;
      return;
    }