Пример #1
0
 string AddSqlForVariables(string queryText) => Regex.Replace(queryText, @"\@\w+\b", match =>
 {
     if (DeclareVariables.FirstOrDefault(nv => "@" + nv.Name == match.Value) != null)
     {
         return(AdvancedRecordset.GetVariableValue(match.Value));
     }
     return(match.Value);
 });
        void ExecuteRecordset(IDSFDataObject dataObject, int update)
        {
            var env = dataObject.Environment;

            AdvancedRecordset = new AdvancedRecordset(env);
            var iter               = new WarewolfListIterator();
            var started            = false;
            var itemsToIterateOver = new Dictionary <string, IWarewolfIterator>();
            var allTables          = new List <string>();

            if (DeclareVariables == null || DeclareVariables.All(d => String.IsNullOrEmpty(d.Value)))
            {
                ExecuteSql(update, allTables, ref started);
            }
            else
            {
                _recordsAffected = 0;
                foreach (var declare in DeclareVariables)
                {
                    if (string.IsNullOrEmpty(declare.Value))
                    {
                        continue;
                    }
                    var res = new WarewolfIterator(env.Eval(declare.Value, update));
                    iter.AddVariableToIterateOn(res);
                    itemsToIterateOver.Add(declare.Name, res);
                }

                while (iter.HasMoreData())
                {
                    foreach (var item in itemsToIterateOver)
                    {
                        AddDeclarations(item.Key, iter.FetchNextValue(item.Value));
                    }
                    ExecuteSql(update, allTables, ref started);
                    started = true;
                }
            }
            foreach (var table in allTables)
            {
                AdvancedRecordset.DeleteTableInSqlite(table);
            }
        }
Пример #3
0
 public override void ExplicitVisit(DeclareVariableStatement node)
 {
     DeclareVariables.Add(node);
 }