public static void Evaluate(CursorStatement statement, Scope scope)
        {
            // TODO: global cursors? statement.Cursor.IsGlobal
            var name   = statement.Cursor.Name.Value;
            var cursor = (Cursor)scope.Env.Vars[name];

            switch (statement)
            {
            case OpenCursorStatement _:
                cursor.Open(scope);
                return;

            case CloseCursorStatement _:
                cursor.Close();
                return;

            case DeallocateCursorStatement _:
                cursor.Deallocate();
                return;

            case FetchCursorStatement fetch:
                var result = CursorFetch(fetch, cursor, scope);
                scope.Env.FetchStatus = result == null ? 1 : 0;
                if (result == null)
                {
                    return;
                }

                foreach (var(v, x) in fetch.IntoVariables.Zip(result.Values, (v, x) => (v, x)))
                {
                    scope.Env.Vars.DeclareOrSet(v.Name, x);
                }

                return;

            default:
                throw FeatureNotSupportedException.Subtype(statement);
            }
        }
Exemple #2
0
 public override void Visit(CursorStatement node)
 {
     ErrorCallback(RULE_NAME, RULE_TEXT, node.StartLine, node.StartColumn);
 }
 public override void ExplicitVisit(CursorStatement fragment)
 {
     _fragments.Add(fragment);
 }
 public override void Visit(CursorStatement node)
 {
     errorCallback(RULE_NAME, RULE_TEXT, node.StartLine, GetColumnNumber(node));
 }
 public sealed override void ExplicitVisit(CursorStatement node)
 {
     base.ExplicitVisit(node);
 }
 public sealed override void Visit(CursorStatement node)
 {
     base.Visit(node);
 }
 public override void ExplicitVisit(CursorStatement node) { this.action(node); }