public object EvaluateExpr(Ast.Expr expr, ScriptEnv env)
        {
            var dt = _notebook.Query($"SELECT ({expr.Sql})", env.Vars);

            if (dt.Columns.Count == 1 && dt.Rows.Count == 1)
            {
                return(dt.Rows[0][0]);
            }
            else
            {
                throw new ScriptException(
                          $"Evaluation of expression \"{expr.Sql}\" did not produce a value.");
            }
        }
        public T EvaluateExpr <T>(Ast.Expr expr, ScriptEnv env)
        {
            var value = EvaluateExpr(expr, env);

            if (typeof(T).IsAssignableFrom(value.GetType()))
            {
                return((T)value);
            }
            else
            {
                throw new ScriptException(
                          $"Evaluation of expression \"{expr.Sql}\" produced a value of type " +
                          $"\"{value.GetType().Name}\" instead of the expected \"{typeof(T).Name}\".");
            }
        }