Exemplo n.º 1
0
        protected override TDSMessageCollection CreateQueryResponse(ITDSServerSession session,
                                                                    TDSSQLBatchToken batchRequest)
        {
            string lowerBatchText = batchRequest.Text.ToLowerInvariant().Trim();

            var result = TryGet(lowerBatchText, null);

            if (null != result)
            {
                List <TDSPacketToken> tokens        = new List <TDSPacketToken>();
                TDSColMetadataToken   metadataToken = new TDSColMetadataToken();
                tokens.Add(metadataToken);

                if (String.IsNullOrWhiteSpace(result.Table))
                {
                    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);

                    TDSRowToken rowToken = new TDSRowToken(metadataToken);
                    rowToken.Data.Add(result.Scalar);

                    tokens.Add(rowToken);

                    TDSDoneToken doneToken =
                        new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count,
                                         TDSDoneTokenCommandType.Select, 1);
                    tokens.Add(doneToken);
                }
                else
                {
                    tokens.AddRange(ReturnTable(result));
                    // Create DONE token
                    TDSDoneToken doneToken = new TDSDoneToken(
                        TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count,
                        TDSDoneTokenCommandType.Select, (ulong)result.GetRecords().Count());
                    tokens.Add(doneToken);
                }

                return(new TDSMessageCollection(new TDSMessage(TDSMessageType.Response, tokens.ToArray())));
            }
            else
            {
                PrintMissignQuery(lowerBatchText, null);
            }
            return(base.CreateQueryResponse(session, batchRequest));
        }
Exemplo n.º 2
0
        protected override TDSMessageCollection CreateQueryResponse(ITDSServerSession session, TDSSQLBatchToken batchRequest)
        {
            string lowerBatchText = batchRequest.Text.ToLowerInvariant();

            if (lowerBatchText.Contains("1 / 0")) // SELECT 1/0
            {
                TDSErrorToken errorToken      = new TDSErrorToken(8134, 1, 16, "Divide by zero error encountered.");
                TDSDoneToken  doneToken       = new TDSDoneToken(TDSDoneTokenStatusType.Final | TDSDoneTokenStatusType.Count, TDSDoneTokenCommandType.Select, 1);
                TDSMessage    responseMessage = new TDSMessage(TDSMessageType.Response, errorToken, doneToken);
                return(new TDSMessageCollection(responseMessage));
            }
            else
            {
                return(base.CreateQueryResponse(session, batchRequest));
            }
        }