private string GenerateScriptSelect(Server server, UrnCollection urns)
        {
            string          script          = string.Empty;
            ScriptingObject scriptingObject = this.Parameters.ScriptingObjects[0];
            Urn             objectUrn       = urns[0];
            string          typeName        = objectUrn.GetNameForType(scriptingObject.Type);

            // select from service broker
            if (string.Compare(typeName, "ServiceBroker", StringComparison.CurrentCultureIgnoreCase) == 0)
            {
                script = Scripter.SelectAllValuesFromTransmissionQueue(objectUrn);
            }

            // select from queues
            else if (string.Compare(typeName, "Queues", StringComparison.CurrentCultureIgnoreCase) == 0 ||
                     string.Compare(typeName, "SystemQueues", StringComparison.CurrentCultureIgnoreCase) == 0)
            {
                script = Scripter.SelectAllValues(objectUrn);
            }

            // select from table or view
            else
            {
                Database db   = server.Databases[databaseName];
                bool     isDw = db.IsSqlDw;
                script = new Scripter().SelectFromTableOrView(server, objectUrn, isDw);
            }

            return(script);
        }
        /// <summary>
        /// Runs the async task that performs the scripting operation.
        /// </summary>
        private void RunSelectTask(ConnectionInfo connInfo, ScriptingParams parameters, RequestContext <ScriptingResult> requestContext)
        {
            ConnectionServiceInstance.ConnectionQueue.QueueBindingOperation(
                key: ConnectionServiceInstance.ConnectionQueue.AddConnectionContext(connInfo, "Scripting"),
                bindingTimeout: ScriptingOperationTimeout,
                bindOperation: (bindingContext, cancelToken) =>
            {
                string script = string.Empty;
                ScriptingObject scriptingObject = parameters.ScriptingObjects[0];
                try
                {
                    Server server          = new Server(bindingContext.ServerConnection);
                    server.DefaultTextMode = true;

                    // build object URN
                    SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(parameters.ConnectionString);
                    Urn objectUrn   = BuildScriptingObjectUrn(server, connectionStringBuilder, scriptingObject);
                    string typeName = objectUrn.GetNameForType(scriptingObject.Type);

                    // select from service broker
                    if (string.Compare(typeName, "ServiceBroker", StringComparison.CurrentCultureIgnoreCase) == 0)
                    {
                        script = Scripter.SelectAllValuesFromTransmissionQueue(objectUrn);
                    }

                    // select from queues
                    else if (string.Compare(typeName, "Queues", StringComparison.CurrentCultureIgnoreCase) == 0 ||
                             string.Compare(typeName, "SystemQueues", StringComparison.CurrentCultureIgnoreCase) == 0)
                    {
                        script = Scripter.SelectAllValues(objectUrn);
                    }

                    // select from table or view
                    else
                    {
                        Database db = server.Databases[connectionStringBuilder.InitialCatalog];
                        bool isDw   = db.IsSqlDw;
                        script      = new Scripter().SelectFromTableOrView(server, objectUrn, isDw);
                    }

                    // send script result to client
                    requestContext.SendResult(new ScriptingResult {
                        Script = script
                    }).Wait();
                }
                catch (Exception e)
                {
                    requestContext.SendError(e).Wait();
                }

                return(null);
            });
        }