/// <summary> /// Prepare response to server ping /// </summary> private TDSMessage _PreparePingResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start the first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.IntN; column.DataTypeSpecific = (byte)4; column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Flags.IsNullable = true; // TODO: Must be nullable, otherwise something is wrong with SqlClient column.Flags.IsComputed = true; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Add row rowToken.Data.Add((int)1); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response to the query about connection end-point /// </summary> private TDSMessage _PrepareConnectionInfoResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start the first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(40, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Name = "net_transport"; // Add a column to the response metadataToken.Columns.Add(column); // Start the second column column = new TDSColumnData(); column.DataType = TDSDataType.BigVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(48, new TDSColumnDataCollation(13632521, 52)); column.Flags.IsNullable = true; column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Name = "local_net_address"; // Add a column to the response metadataToken.Columns.Add(column); // Start the third column column = new TDSColumnData(); column.DataType = TDSDataType.IntN; column.DataTypeSpecific = (byte)4; column.Flags.IsNullable = true; column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Name = "local_tcp_port"; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Add row rowToken.Data.Add(session.ServerEndPointInfo.Transport.ToString()); rowToken.Data.Add(session.ServerEndPointInfo.Address.ToString()); rowToken.Data.Add(session.ServerEndPointInfo.Port); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response to the query about connection encryption /// </summary> private TDSMessage _PrepareEncryptionInfoResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start the first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(40, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Name = "encrypt_option"; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Check if encryption is enabled if (session.Encryption == TDSEncryptionType.Full) { // Add row rowToken.Data.Add("TRUE"); } else { // Add row rowToken.Data.Add("FALSE"); } // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for query of class of the SQL Server instance /// </summary> private TDSMessage _PrepareTestSQLServerClassResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(256, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Get the server class rowToken.Data.Add(session.Server.GetType().FullName); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for session user name query /// </summary> private TDSMessage _PrepareSessionUserResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Prepare column type-specific data TDSShilohVarCharColumnSpecific nVarChar = new TDSShilohVarCharColumnSpecific(256, new TDSColumnDataCollation(13632521, 52)); // Prepare the first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.Flags.Updatable = TDSColumnDataUpdatableFlag.Unknown; column.Flags.IsNullable = true; column.DataTypeSpecific = nVarChar; column.Name = "nt_user_name"; // Add a column to the response metadataToken.Columns.Add(column); // Prepare the second column column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.Flags.Updatable = TDSColumnDataUpdatableFlag.Unknown; column.Flags.IsNullable = true; column.DataTypeSpecific = nVarChar; column.Name = "nt_domain"; // Add a column to the response metadataToken.Columns.Add(column); // Prepare the third column column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.Flags.Updatable = TDSColumnDataUpdatableFlag.Unknown; column.DataTypeSpecific = nVarChar; column.Name = "login_name"; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Check user type if (session.SQLUserID != null) { // Add row rowToken.Data.Add(null); // nt_user_name rowToken.Data.Add(null); // nt_domain rowToken.Data.Add(session.SQLUserID); // login_name } else if (session.NTUserAuthenticationContext != null) { // Get user identifier string userID = session.NTUserAuthenticationContext.GetRemoteIdentity().Name; // Look for traditional separator for form "<domain>\<user>" int indexOfSeparator = userID.IndexOf('\\'); string domain = null; string user = null; // Parse domain and user out of the entry if (indexOfSeparator != -1) { // Extract parts domain = userID.Substring(0, indexOfSeparator); user = userID.Substring(indexOfSeparator + 1); } else { // Look for a different type of separator for form "<user>@<domain>" indexOfSeparator = userID.IndexOf('@'); // Check if found if (indexOfSeparator != -1) { // Extract parts domain = userID.Substring(indexOfSeparator + 1); user = userID.Substring(0, indexOfSeparator); } else { // We don't recognize this user so don't parse it domain = null; user = userID; } } // Add row rowToken.Data.Add(user); // nt_user_name rowToken.Data.Add(domain); // nt_domain rowToken.Data.Add(userID); // login_name } else { // We don't have a user, which is very strange since we're in query engine already rowToken.Data.Add(null); // nt_user_name rowToken.Data.Add(null); // nt_domain rowToken.Data.Add(null); // login_name } // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for user nane query that OLE DB stack dispatches upon connection /// </summary> private TDSMessage _PrepareOleDbReadOnlyUserName(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.BigVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(1, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; // Add a column to the response metadataToken.Columns.Add(column); // Start second column column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(128, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Add row rowToken.Data.Add("N"); rowToken.Data.Add("dbo"); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for query whether this is a SQL Azure instance /// </summary> private TDSMessage _PrepareIsAzure(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start a new column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.IntN; column.DataTypeSpecific = (byte)4; column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Flags.IsComputed = true; column.Flags.IsNullable = true; // TODO: Must be nullable, otherwise something is wrong with SqlClient // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Per http://msdn.microsoft.com/en-us/library/ms174396.aspx // 4 = Express (This is returned for Express, Express with Advanced Services, and Windows Embedded SQL.) rowToken.Data.Add(4); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for context info /// </summary> private TDSMessage _PrepareContextInfoResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start a new column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.BigVarBinary; column.DataTypeSpecific = (ushort)128; column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Prepare context info container byte[] contextInfo = null; // Check if session has a context info if ((session as GenericTDSServerSession).ContextInfo != null) { // Allocate a container contextInfo = new byte[128]; // Copy context info into the container Array.Copy((session as GenericTDSServerSession).ContextInfo, contextInfo, (session as GenericTDSServerSession).ContextInfo.Length); } // Set context info rowToken.Data.Add(contextInfo); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for server instance name query /// </summary> private TDSMessage _PrepareInstanceNameResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(256, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Start with server name string value = ServerArguments.ServerName; // Check if server name contains a slash if (value.Contains("\\")) { // Take everything after the slash value = value.Substring(value.IndexOf('\\') + 1); } else { // Instance is unnamed value = null; } // Add row rowToken.Data.Add(value); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for transaction isolation level /// </summary> private TDSMessage _PrepareTransactionIsolationLevelResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start a new column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.Int2; column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Name = "transaction_isolation_level"; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Read the value from the session rowToken.Data.Add((short)(session as GenericTDSServerSession).TransactionIsolationLevel); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for options /// </summary> private TDSMessage _PrepareOptionsResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start a new column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.Int4; column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Flags.IsComputed = true; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Convert to generic session GenericTDSServerSession genericSession = session as GenericTDSServerSession; // Serialize the options into the bit mask int options = 0; // Check transaction abort on error if (genericSession.TransactionAbortOnError) { options |= 0x4000; } // Check numeric round abort if (genericSession.NumericRoundAbort) { options |= 0x2000; } // Check concatenation of nulls yields null if (genericSession.ConcatNullYieldsNull) { options |= 0x1000; } // Check ansi null default OFF if (!genericSession.AnsiNullDefaultOn) { options |= 0x800; } // Check ansi null default ON if (genericSession.AnsiNullDefaultOn) { options |= 0x400; } // Check no count if (genericSession.NoCount) { options |= 0x200; } // Check quoted identifier if (genericSession.QuotedIdentifier) { options |= 0x100; } // Check arithmetic ignore if (genericSession.ArithIgnore) { options |= 0x80; } // Check arithmetic abort if (genericSession.ArithAbort) { options |= 0x40; } // Check ansi nulls if (genericSession.AnsiNulls) { options |= 0x20; } // Check ansi padding if (genericSession.AnsiPadding) { options |= 0x10; } // Check ansi warnings if (genericSession.AnsiWarnings) { options |= 0x8; } // Check cursor close on commit if (genericSession.CursorCloseOnCommit) { options |= 0x4; } // Check implicit transactions if (genericSession.ImplicitTransactions) { options |= 0x2; } // Read the value from the session rowToken.Data.Add(options); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for language /// </summary> private TDSMessage _PrepareLanguageResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start a new column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(256, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Flags.IsNullable = true; column.Name = "language"; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Generate a date format string rowToken.Data.Add(LanguageString.ToString((session as GenericTDSServerSession).Language)); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response for ANSI null default on /// </summary> private TDSMessage _PrepareAnsiNullDefaultOnResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start a new column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.Bit; column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Name = "ansi_null_dflt_on"; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Read the value from the session rowToken.Data.Add((session as GenericTDSServerSession).AnsiNullDefaultOn); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response to connection reset request count /// </summary> private TDSMessage _PrepareAuthSchemeResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start the first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(40, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Name = "auth_scheme"; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Check which authentication method are we using // @TODO add Federated Authentication once VSTS 1072394 is resolved if (session.SQLUserID != null) { // Add row rowToken.Data.Add("SQL"); } else { // Add row rowToken.Data.Add("NTML"); } // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare response to connection reset request count /// </summary> private TDSMessage _PrepareSPIDResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start the first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(128, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Flags.IsNullable = true; column.Flags.IsComputed = true; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Add row rowToken.Data.Add(session.SessionID.ToString()); // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }
/// <summary> /// Prepare current database response /// </summary> private TDSMessage _PrepareDatabaseResponse(ITDSServerSession session) { // Prepare result metadata TDSColMetadataToken metadataToken = new TDSColMetadataToken(); // Start the first column TDSColumnData column = new TDSColumnData(); column.DataType = TDSDataType.NVarChar; column.DataTypeSpecific = new TDSShilohVarCharColumnSpecific(256, new TDSColumnDataCollation(13632521, 52)); column.Flags.Updatable = TDSColumnDataUpdatableFlag.ReadOnly; column.Name = "name"; // Add a column to the response metadataToken.Columns.Add(column); // Start the second column column = new TDSColumnData(); column.DataType = TDSDataType.IntN; column.DataTypeSpecific = (byte)1; column.Flags.IsNullable = true; column.Name = "state"; // Add a column to the response metadataToken.Columns.Add(column); // Log response TDSUtilities.Log(Log, "Response", metadataToken); // Prepare result data TDSRowToken rowToken = new TDSRowToken(metadataToken); // Add row rowToken.Data.Add(session.Database); rowToken.Data.Add((byte)0); // Online // Log response TDSUtilities.Log(Log, "Response", rowToken); // Create DONE token TDSDoneToken doneToken = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1); // Log response TDSUtilities.Log(Log, "Response", doneToken); // Serialize tokens into the message return new TDSMessage(TDSMessageType.Response, metadataToken, rowToken, doneToken); }