private SourceRemoteTableRowset(string serverName, string databaseName, SchemaName schemaName, TableName tableName, RowsetAlias rowsetAlias): base(rowsetAlias) {
			Debug.Assert(tableName != null);
			if (!string.IsNullOrEmpty(serverName)) {
				this.serverName = new Identifier(serverName);
			}
			this.databaseName = new Identifier(databaseName);
			this.schemaName = schemaName;
			this.tableName = tableName;
		}
		public SourceTableColumnNodesRowset(SchemaName tableName, TableName columnName, NamedFunction functionCall, RowsetAlias rowsetAlias): this(new Qualified<SchemaName, TableName>(null, new TableName(tableName.Value)), new ColumnName(columnName.Value), functionCall, rowsetAlias) {
			tableNameQualified.LockOverride(); // TableName here is usually an alias to a table, so don't prefix this
		}
		public SourceFunctionRowset(SchemaName schemaName, NamedFunction function, RowsetAlias rowsetAlias): this(function.QualifiedWith(schemaName), rowsetAlias) {}
		public SourceRemoteTableRowset(SchemaName serverName, TableName databaseName, SchemaName schemaName, TableName tableName, RowsetAlias rowsetAlias): this(serverName.Value, databaseName.Value, schemaName, tableName, rowsetAlias) {}
		public SourceRemoteTableRowset(SchemaName databaseName, TableName schemaName, TableName tableName, RowsetAlias rowsetAlias): this(string.Empty, databaseName.Value, new SchemaName(schemaName.Value), tableName, rowsetAlias) {}