Beispiel #1
0
        internal IColumnSourceMetadata TryGetTableVariable(string variableName)
        {
            if (cache_table_variables.TryGetValue(variableName, out TableVariableMetadata source_metadata))
            {
                return(source_metadata);
            }
            TableVariableDeclarionVisitor vstor = new TableVariableDeclarionVisitor(variableName);

            BodyFragment.Accept(vstor);
            if (vstor.variableDefinition != null)
            {
                source_metadata = new TableVariableMetadata(vstor.variableDefinition);
                cache_table_variables.Add(variableName, source_metadata);
                return(source_metadata);
            }

            if (vstor.VariableDataType != null)
            {
                IColumnSourceMetadata udt_metadata = SchemaMetadata.TryGetUserDefinedTableTypeMetadata(vstor.VariableDataType.Name.SchemaIdentifier.Dequote(), vstor.VariableDataType.Name.BaseIdentifier.Dequote());
                return(udt_metadata);
            }
            var prm = parameters.TryGetParameterType(vstor.VariableName);

            if (prm != null && prm.IsUserDefinedTableType)
            {
                IColumnSourceMetadata udt = SchemaMetadata.TryGetUserDefinedTableTypeMetadata(prm.UserDefinedTableTypeSchema, prm.UserDefinedTableTypeName);
                if (udt != null)
                {
                    return(udt);
                }
            }
            //BodyFragment.Accept(new DumpFragmentVisitor(true));
            throw new NotImplementedException(variableName);
        }
Beispiel #2
0
        internal ColumnTypeMetadata TryGetScalarVariableType(string variableName)
        {
            var pt = parameters.TryGetParameterType(variableName);

            if (pt != null)
            {
                return(new ColumnTypeMetadata(pt.ColumnDbType, pt.AllowNull));
            }

            // scan for variable declaration

            TableVariableDeclarionVisitor vstor = new TableVariableDeclarionVisitor(variableName);

            BodyFragment.Accept(vstor);
            if (vstor.variableDefinition != null)
            {
                throw new NotImplementedException(variableName);
            }

            if (vstor.VariableDataType != null)
            {
                var variableDbType = ProcedureGenerator.ResolveToDbDataType(vstor.VariableDataType);
                return(new ColumnTypeMetadata(variableDbType, true));
            }
            //BodyFragment.Accept(new DumpFragmentVisitor(true));
            throw new NotImplementedException(variableName);
        }