public override void ExplicitVisit(UserDataTypeReference node) { var name = node.Name; var parameters = node.Parameters; if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debugger.Break(); } node.Analyse.ResultType = null; base.ExplicitVisit(node); }
public static Field GetField( this UserDataTypeReference userDataTypeReference, string name, bool isNullable, ILogger logger, SchemaFile file ) { var identifier = userDataTypeReference.Name.GetQualifiedIdentfier(file); var identifiers = identifier.Split('.'); if (userDataTypeReference.Name.Identifiers.Count.Equals(1)) { // TODO : trying if it is a system data type.. I basically have 2 options // 1) hardcode what I'm interested in here // 2) create SQL files and process those first // we'll see how big this gets.. var systemTypeName = userDataTypeReference.Name.Identifiers.First().Value; switch (systemTypeName.ToUpper()) { case "SYSNAME": return(new StringField() { Name = name, Type = FieldType.String, // nvarchar Origin = OriginType.SystemType, Length = 128, IsNullable = false, }); case "GEOGRAPHY": return(new TableReferenceField() { Name = name, Type = FieldType.Table, Origin = OriginType.SystemType, IsNullable = false, Reference = new Table() { File = file, Database = identifiers[0], Schema = identifiers[1], Identifier = identifiers[2], Columns = new List <Field>() { new DefaultField() { Name = "Lat", Type = FieldType.Float, Origin = OriginType.Table, IsNullable = false, }, new DefaultField() { Name = "Long", Type = FieldType.Float, Origin = OriginType.Table, IsNullable = false, }, } } }); } } var reference = file.Schema.ContainsKey(identifier) ? file.Schema[identifier] : new Unknown() { File = file, Database = identifiers[0], Schema = identifiers[1], Identifier = identifiers[2], }; if (reference.Type == SchemaObjectType.NotSpecified) { logger.Log(LogLevel.Warning, LogType.MissingSchemaObject, file.Path, $"\"{identifier}\" user data type reference is missing in the schema."); } return(new TableReferenceField() { Name = name, Type = FieldType.Table, Origin = OriginType.Reference, IsNullable = isNullable, Reference = reference, }); }
public CreateProcedureStatement Convert(CStoredProcedure storedProcedure) { //build body string[] parts = { storedProcedure.Schema.SchemaName, storedProcedure.StoredProcedureName }; var createStoredProcedure = new CreateProcedureStatement(); ///set schema and table name /// var schemaObjectName = new SchemaObjectName(); schemaObjectName.Identifiers.Add(new Identifier { Value = storedProcedure.Schema.SchemaName }); schemaObjectName.Identifiers.Add(new Identifier { Value = storedProcedure.StoredProcedureName }); createStoredProcedure.ProcedureReference = new ProcedureReference(); createStoredProcedure.ProcedureReference.Name = schemaObjectName; //add parameters foreach (var param in storedProcedure.Parameter) { if (param.ParameterTypeIsUserDefined) { var dataType = new UserDataTypeReference(); dataType.Name = new SchemaObjectName(); dataType.Name.Identifiers.Add(new Identifier { Value = param.ParameterTypeRaw }); if (param.ParameterLength > 0) { dataType.Parameters.Add(new IntegerLiteral { Value = param.ParameterLength.ToString() }); } createStoredProcedure.Parameters.Add(new ProcedureParameter { VariableName = new Identifier { Value = $"@{param.ParameterName}" }, DataType = dataType, Value = param.DefaultToNull ? new NullLiteral() : null, Modifier = param.ParameterTypeRaw.ToLower() == "sysname" ? ParameterModifier.None: ParameterModifier.ReadOnly //todo }); } else { var dataType = new SqlDataTypeReference(); var parameterName = param.ParameterName; if (param.IsCollection) { parameterName += "_Collection";// temp solution for comma separate collection parameters } if (param.ParameterTypeRaw == "enum") { dataType.SqlDataTypeOption = SqlDataTypeOption.Int; //todo: review this } else { dataType.SqlDataTypeOption = SqlMapper.SqlTypeToSqlDataTypeOption(param.ParameterTypeRaw); } if (param.ParameterLength > 0) { dataType.Parameters.Add(new IntegerLiteral { Value = param.ParameterLength.ToString() }); } createStoredProcedure.Parameters.Add(new ProcedureParameter { VariableName = new Identifier { Value = $"@{parameterName}" }, DataType = dataType, Value = param.DefaultToNull ? new NullLiteral() : null }); } } var parser = new TSql120Parser(false); createStoredProcedure.StatementList = new StatementList(); if (!string.IsNullOrEmpty(storedProcedure.StoredProcedureBody)) { IList <ParseError> errors; var script2 = parser.Parse(new StringReader(storedProcedure.StoredProcedureBody), out errors) as TSqlScript; if (errors.Count > 0) { RaiseSqlErrorsException(errors, storedProcedure.StoredProcedureBody); } foreach (var batch2 in script2.Batches) { foreach (var statement in batch2.Statements) { createStoredProcedure.StatementList.Statements.Add(statement); } } } return(createStoredProcedure); }
public override void Visit(UserDataTypeReference node) { this.action(node); }
public override void ExplicitVisit(UserDataTypeReference fragment) { _fragments.Add(fragment); }
public override void ExplicitVisit(UserDataTypeReference node) { (new TypeVisitor(this.currentScopeRef.Current)).ExplicitVisit(node); }