windows-nt/Source/XPSP1/NT/inetsrv/query/apps/ci/sql.vbs

307 lines
8 KiB
Plaintext
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
'-------------------------------------------
'
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
' PARTICULAR PURPOSE.
'
' Copyright (c) Microsoft Corporation, 1999. All Rights Reserved.
'
' PROGRAM: qu.vbs
'
' PURPOSE: Illustrates use of Indexing Service with Windows Scripting Host.
' Same behavior as the C++ sample application QSample.
'
' PLATFORM: Windows 2000
'
'-------------------------------------------
main
'-------------------------------------------
sub Main
if WScript.Arguments.Count < 1 then call Usage end if
' set defaults for all arguments
query = ""
locale = ""
forceci = TRUE
inputfile = ""
quiet = FALSE
maxhits = 0
firsthits = FALSE
repeat = 1
' parse command line arguments
for i = 0 to WScript.Arguments.Count - 1
arg = WScript.Arguments( i )
first = left( arg, 1 )
c = mid( arg, 2, 1 )
if "/" = first or "-" = first then
if ":" = mid( arg, 3, 1 ) then
v = mid( arg, 4 )
select case c
case "e" locale = v
case "f" forceci = ( v = "+" )
case "i" inputfile = v
case "r" repeat = v
case "x" maxhits = v
case "y" maxhits = v
firsthits = TRUE
case else Usage
end select
else
select case c
case "q" quiet = TRUE
case else Usage
end select
end if
else
if "" = query then query = arg else Usage
end if
next
for i = 1 to repeat
if "" = inputfile then
if "" = query then
Usage
end if
DoQuery query, locale, forceci, quiet, maxhits, firsthits
else
if "" <> query then call Usage
' Open the input file and treat each line as a query.
' Report errors, but don't stop reading queries.
set fs = WScript.CreateObject( "Scripting.FileSystemObject" )
set f = fs.OpenTextFile( inputfile, 1 )
do until f.AtEndOfStream
line = f.ReadLine
on error resume next
DoQuery line, locale, forceci, quiet, maxhits, firsthits
if 0 <> Err.Number then
out Err.Description
out "The query '" & line & "' failed, error 0x" & Hex( Err.Number )
Err.Clear
end if
out ""
loop
end if
next
end sub
'-------------------------------------------
sub Out( str )
WScript.echo str
end sub
sub Out2( num, str )
out right( space( 9 ) & num, 9 ) & " " & str
end sub
'-------------------------------------------
sub Usage
out "usage: qu [arguments]"
out " query An Indexing Service query."
out " /e:locale ISO locale identifier, e.g. EN-US; default is system locale."
out " /f:(+|-) + or -, for force use of index. Default is +."
out " /i:inputfile Text input file with queries, one per line."
out " /q Quiet. Don't display info other than query results."
out " /r:# Number of times to repeat the command."
out " /x:maxhits Maximum number of hits to retrieve, default is no limit."
out " /y:firsthits Only look at the first N results."
out ""
out " examples: cscript qu.vbs mango"
out ""
out " locales: af ar-ae ar-bh ar-dz ar-eg ar-iq ar-jo ar-kw ar-lb"
out " ar-ly ar-ma ar-om ar-qa ar-sa ar-sy ar-tn ar-ye be"
out " bg ca cs da de de-at de-ch de-li de-lu e en en"
out " en-au en-bz en-ca en-gb en-ie en-jm en-nz en-tt"
out " en-us en-za es es es-ar es-bo es-c es-co es-cr"
out " es-do es-ec es-gt es-hn es-mx es-ni es-pa es-pe"
out " es-pr es-py es-sv es-uy es-ve et eu fa fi fo fr"
out " fr-be fr-ca fr-ch fr-lu gd gd-ie he hi hr hu in"
out " is it it-ch ja ji ko ko lt lv mk ms mt n neutr"
out " nl-be no no p pt pt-br rm ro ro-mo ru ru-mo s sb"
out " sk sq sr sr sv sv-fi sx sz th tn tr ts uk ur ve"
out " vi xh zh-cn zh-hk zh-sg zh-tw zu"
WScript.Quit( 2 )
end sub
'-------------------------------------------
function FormatValue( v, t )
if 7 = t or 137 = t then
w = 20
elseif 2 = t or 3 = t or 4 = t or 5 = t or 14 = t or 17 = t or 18 = t or 19 = t then
w = 7
elseif 20 = t or 21 = t then
w = 12
else
w = 0
end if
if 0 = w then
r = v
else
r = right( space( w ) & v, w )
end if
FormatValue = r
end function
Const STAT_BUSY = 0
Const STAT_ERROR = &H1
Const STAT_DONE = &H2
Const STAT_REFRESH = &H3
Const STAT_PARTIAL_SCOPE = &H8
Const STAT_NOISE_WORDS = &H10
Const STAT_CONTENT_OUT_OF_DATE = &H20
Const STAT_REFRESH_INCOMPLETE = &H40
Const STAT_CONTENT_QUERY_INCOMPLETE = &H80
Const STAT_TIME_LIMIT_EXCEEDED = &H100
Function GetCiOutOfDate(value)
GetCiOutOfDate = value And STAT_CONTENT_OUT_OF_DATE
end Function
Function GetCiQueryIncomplete(value)
GetCiQueryIncomplete = value And STAT_CONTENT_QUERY_INCOMPLETE
end Function
Function GetCiQueryTimedOut(value)
GetCiQueryTimedOut = value And STAT_TIME_LIMIT_EXCEEDED
end Function
'-------------------------------------------
sub DoQuery( query, locale, forceci, quiet, maxhits, firsthits )
if "" <> query then
set Connection = WScript.CreateObject( "ADODB.Connection" )
Connection.ConnectionString = "provider=msidxs;"
Connection.Open
set AdoCommand = WScript.CreateObject( "ADODB.Command" )
AdoCommand.CommandTimeout = 10
AdoCommand.ActiveConnection = Connection
' AdoCommand.CommandText = "SELECT size,path from SYSTEM..SCOPE('""\""') WHERE CONTAINS('microsoft') AND DOCAUTHOR <> 'David' ORDER BY Path DESC"
AdoCommand.CommandText = query
AdoCommand.Properties("Always Use Content Index") = forceci
if 0 <> maxhits then
if firsthits then
AdoCommand.Properties("First Rows") = maxhits
else
AdoCommand.Properties("Maximum Rows") = maxhits
end if
end if
if "" <> locale then
AdoCommand.Properties("SQL Content Query Locale String") = locale
end if
set rs = WScript.CreateObject( "ADODB.RecordSet" )
rs.CursorType = adOpenKeyset
rs.open AdoCommand
' Display the results, 20 rows at a time for performance
const cRowsToGet = 20
rs.CacheSize = cRowsToGet
cHits = 0
do until rs.EOF
rows = rs.GetRows( cRowsToGet )
for r = 0 to UBound( rows, 2 )
row = ""
for col = 0 to UBound( rows, 1 )
if 0 <> col then row = row & " "
row = row & FormatValue( rows( col, r ), rs( col ).type )
next
out row
cHits = cHits + 1
next
loop
' Display query status information
if not quiet then
out CHR(10) & cHits & " files matched the query '" & query & "'"
if GetCiOutofDate(RS.Properties("Rowset Query Status")) then
out "The index is out of date"
end if
if GetCiQueryIncomplete(RS.Properties("Rowset Query Status")) then
out "The query results are incomplete; may require enumeration"
end if
if GetCiQueryTimedOut(RS.Properties("Rowset Query Status")) then
out "The query timed out"
end if
end if
end if
end sub