public ResultSetColumnMapping(IResultSetColumnMapping other, IListener listener, IPolicies policies, ICompilerMessageBuilder messageProvider) { if(ReferenceEquals(other, null)) throw new ArgumentNullException(nameof(other)); this.ColumnName = other.ColumnName; this.PropertyName = other.PropertyName; }
public async Task<ISqlSchemaMappingCompilerOutput> CompileAsync( ISqlSchemaMappingCompilerInput input, ICompilerMessageBuilder messageProvider = null) { if(ReferenceEquals(input, null)) throw new ArgumentNullException(nameof(input)); messageProvider = messageProvider ?? new CompilerMessageBuilder(); try { this.m_output = new SqlSchemaMappingCompilerOutput(); var args = new XArgs(this.m_output, new Policies(), new CompilerMessageBuilder()); this.m_input = new SqlSchemaMappingCompilerInputAdapter(input, messageProvider, this.m_output); if (this.m_output.Errors.Any()) return this.m_output; this.m_output.DataRowInterfaces.AddRange(m_input.DataRowInterfaces); this.m_output.OperationRequestContracts.AddRange(m_input.OperationResponseInterfaces); this.m_output.OperationResponseContracts.AddRange(m_input.OperationResponseInterfaces); await this.CompileTableTypesAsync(args); return this.m_output; } finally { this.m_input = null; this.m_output = null; this.m_interfaceNames.Clear(); } }
public BlobProperty( IProperty other, IListener listener, IPolicies policies, ICompilerMessageBuilder messageProvider, int propertyIndex) : base(other, listener, policies, messageProvider, propertyIndex) { }
public PropertySet( IPropertySet other, IListener listener, IPolicies policies, ICompilerMessageBuilder messageProvider, int interfaceIndex) { if(ReferenceEquals(other, null)) throw new ArgumentNullException(nameof(other)); if (ReferenceEquals(listener, null)) throw new ArgumentNullException(nameof(listener)); if (ReferenceEquals(policies, null)) throw new ArgumentNullException(nameof(policies)); if (ReferenceEquals(messageProvider, null)) throw new ArgumentNullException(nameof(messageProvider)); this.InterfaceName = other.InterfaceName ?? policies.GenerateSurrogateInterfaceName(interfaceIndex); if (ReferenceEquals(other.InterfaceName, null)) listener.Error(messageProvider.MissingInterfaceName(this.InterfaceName, interfaceIndex)); if (false == policies.IsValidInterfaceName(this.InterfaceName)) listener.Error(messageProvider.InvalidInterfaceName(this.InterfaceName, interfaceIndex)); if (ReferenceEquals(other.Properties, null)) { listener.Error(messageProvider.EmptyPropertiesList(this.InterfaceName, interfaceIndex)); return; } int propertyIndex = 0; foreach (var property in other.Properties.OfType<IBasicProperty>()) { this.Properties.Add( new BasicProperty(property, listener, policies, messageProvider, propertyIndex++)); } propertyIndex = 0; foreach (var property in other.Properties.OfType<IBlobProperty>()) { this.Properties.Add( new BlobProperty(property, listener, policies, messageProvider, propertyIndex++)); } propertyIndex = 0; foreach (var property in other.Properties.OfType<ITableValueProperty>()) { this.Properties.Add( new TableValueProperty(property, listener, policies, messageProvider, propertyIndex++)); } this.m_ixPropertyByName = this.Properties.ToDictionary( p => p.PropertyName, StringComparer.OrdinalIgnoreCase); }
public DataRowMapping(IDataRowMapping mapping, IListener listener, IPolicies policies, ICompilerMessageBuilder compilerMessageBuilder) { InterfaceName = mapping.InterfaceName; foreach (var columnMapping in mapping.ColumnMappings) { var item = new ResultSetColumnMapping(columnMapping, listener, policies, compilerMessageBuilder); this.Mappings.Add(item); this.m_ixColumnMappingByColumnName.Add(item.ColumnName, item); } }
public BasicProperty( IBasicProperty other, IListener listener, IPolicies policies, ICompilerMessageBuilder messageProvider, int propertyIndex) : base(other, listener, policies, messageProvider, propertyIndex) { messageProvider = messageProvider ?? new CompilerMessageBuilder(); this.PropertyTypeName = other.PropertyTypeName ?? typeof(object).FullName; if(false == policies.IsValidBasicPropertyTypeName(other.PropertyTypeName)) listener.Error(messageProvider.InvalidBasicPropertyTypeName(this.PropertyName, other.PropertyTypeName)); }
public TableValueProperty( ITableValueProperty other, IListener listener, IPolicies policies, ICompilerMessageBuilder messageProvider, int propertyIndex) : base(other, listener, policies, messageProvider, propertyIndex) { this.DataRowInterfaceName = other.DataRowInterfaceName ?? typeof(object).FullName; if (ReferenceEquals(other.DataRowInterfaceName, null)) listener.Error(messageProvider.MissingDataRowInterfaceName(propertyIndex)); else if(false == policies.IsValidInterfaceName(this.DataRowInterfaceName)) listener.Error(messageProvider.InvalidDataRowInterfaceName(this.DataRowInterfaceName, propertyIndex)); }
public XArgs( IListener listener, IPolicies policies, ICompilerMessageBuilder messageBuilder) { if(ReferenceEquals(listener, null)) throw new ArgumentNullException(nameof(listener)); if (ReferenceEquals(policies, null)) throw new ArgumentNullException(nameof(policies)); if (ReferenceEquals(messageBuilder, null)) throw new ArgumentNullException(nameof(messageBuilder)); this.Listener = listener; this.Policies = policies; this.MessageBuilder = messageBuilder; }
public SqlSchemaMappingCompilerInputAdapter( ISqlSchemaMappingCompilerInput other, ICompilerMessageBuilder compilerMessageBuilder, IListener listener) { if(ReferenceEquals(other, null)) throw new ArgumentNullException(nameof(other)); if (ReferenceEquals(compilerMessageBuilder, null)) throw new ArgumentNullException(nameof(compilerMessageBuilder)); var interfaceNames = new HashSet<string>(); var databaseObjectNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase); var policies = new Policies(); {// Data row contracts var contracts = other.DataRowInterfaces.ToDenseCollection(); for (int interfaceIndex = 0; interfaceIndex < contracts.Count; ++interfaceIndex) { var contract = contracts[interfaceIndex]; var item = new PropertySet(contract, listener, policies, compilerMessageBuilder, interfaceIndex); this.DataRowInterfaces.Add(item); if (!interfaceNames.Add(item.InterfaceName)) listener.Error(compilerMessageBuilder.DuplicateInterfaceNameInDataRowInterfaces(item.InterfaceName)); this.m_ixInterfaceByInterfaceName[item.InterfaceName] = item; this.m_ixDataRowInterfaceByInterfaceName[item.InterfaceName] = item; } } {// Operation request contracts var contracts = other.OperationRequestInterfaces.ToDenseCollection(); for (int interfaceIndex = 0; interfaceIndex < contracts.Count; ++interfaceIndex) { var contract = contracts[interfaceIndex]; var item = new PropertySet(contract, listener, policies, compilerMessageBuilder, interfaceIndex); this.OperationRequestInterfaces.Add(item); if (!interfaceNames.Add(item.InterfaceName)) listener.Error(compilerMessageBuilder.DuplicateInterfaceNameInOperationRequestInterfaces(item.InterfaceName)); this.m_ixInterfaceByInterfaceName[item.InterfaceName] = item; this.m_ixOperationRequestInterfaceByInterfaceName[item.InterfaceName] = item; foreach (var tableValueProperty in item.Properties.OfType<TableValueProperty>()) { if (!this.m_ixDataRowInterfaceByInterfaceName.ContainsKey(tableValueProperty.DataRowInterfaceName)) { listener.Error( compilerMessageBuilder.TableValueInterfaceNotDefined( item.InterfaceName, tableValueProperty.DataRowInterfaceName, tableValueProperty.PropertyName)); } } } } {// Operation response contracts var contracts = other.OperationResponseInterfaces.ToDenseCollection(); for (int interfaceIndex = 0; interfaceIndex < contracts.Count; ++interfaceIndex) { var contract = contracts[interfaceIndex]; var item = new PropertySet(contract, listener, policies, compilerMessageBuilder, interfaceIndex); this.OperationResponseInterfaces.Add(item); if (!interfaceNames.Add(item.InterfaceName)) listener.Error(compilerMessageBuilder.DuplicateInterfaceNameInOperationResponseInterfaces(item.InterfaceName)); this.m_ixInterfaceByInterfaceName[item.InterfaceName] = item; this.m_ixOperationResponseInterfaceByInterfaceName[item.InterfaceName] = item; } } foreach (var userSelector in other.TableTypeSelectors) { var selector =new SqlTableTypeSelector(userSelector, listener, policies, compilerMessageBuilder); TableTypeSelectors.Add(selector); if (false == databaseObjectNames.Add(selector.FullName)) { listener.Error(compilerMessageBuilder.DuplicateDatabaseObjectSelector(selector.FullName)); continue; } foreach (var dataRowMapping in selector.DataRowMappings) { if (!this.m_ixDataRowInterfaceByInterfaceName.ContainsKey(dataRowMapping.InterfaceName)) { listener.Error(compilerMessageBuilder.TableValueInterfaceReferedByTableTypeMappingNotDefined(selector.FullName, dataRowMapping.InterfaceName)); continue; } var contract = this.m_ixDataRowInterfaceByInterfaceName[dataRowMapping.InterfaceName]; dataRowMapping.Interface = contract; var propertyNames = new HashSet<string>(contract.Properties.Select(m=> m.PropertyName), StringComparer.OrdinalIgnoreCase); foreach (var mapping in dataRowMapping.Mappings) { if (false == propertyNames.Contains(mapping.PropertyName)) { listener.Error(compilerMessageBuilder.InterfacePropertyNotFound(mapping.PropertyName)); } } } } }