mirror of
https://gitlab.winehq.org/wine/wine.git
synced 2024-11-21 17:09:06 -07:00
Merge branch 'vibhavp/structuredquery' into 'master'
dlls/structuredquery: Introduce new DLL, add stubs. See merge request wine/wine!6788
This commit is contained in:
commit
457161a9ed
14 changed files with 967 additions and 0 deletions
3
configure
generated
vendored
3
configure
generated
vendored
|
@ -1434,6 +1434,7 @@ enable_stdole2_tlb
|
||||||
enable_stdole32_tlb
|
enable_stdole32_tlb
|
||||||
enable_sti
|
enable_sti
|
||||||
enable_strmdll
|
enable_strmdll
|
||||||
|
enable_structuredquery
|
||||||
enable_svrapi
|
enable_svrapi
|
||||||
enable_sxs
|
enable_sxs
|
||||||
enable_t2embed
|
enable_t2embed
|
||||||
|
@ -22710,6 +22711,8 @@ wine_fn_config_makefile dlls/sti/tests enable_tests
|
||||||
wine_fn_config_makefile dlls/storage.dll16 enable_win16
|
wine_fn_config_makefile dlls/storage.dll16 enable_win16
|
||||||
wine_fn_config_makefile dlls/stress.dll16 enable_win16
|
wine_fn_config_makefile dlls/stress.dll16 enable_win16
|
||||||
wine_fn_config_makefile dlls/strmdll enable_strmdll
|
wine_fn_config_makefile dlls/strmdll enable_strmdll
|
||||||
|
wine_fn_config_makefile dlls/structuredquery enable_structuredquery
|
||||||
|
wine_fn_config_makefile dlls/structuredquery/tests enable_tests
|
||||||
wine_fn_config_makefile dlls/svrapi enable_svrapi
|
wine_fn_config_makefile dlls/svrapi enable_svrapi
|
||||||
wine_fn_config_makefile dlls/sxs enable_sxs
|
wine_fn_config_makefile dlls/sxs enable_sxs
|
||||||
wine_fn_config_makefile dlls/sxs/tests enable_tests
|
wine_fn_config_makefile dlls/sxs/tests enable_tests
|
||||||
|
|
|
@ -3108,6 +3108,8 @@ WINE_CONFIG_MAKEFILE(dlls/sti/tests)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/storage.dll16,enable_win16)
|
WINE_CONFIG_MAKEFILE(dlls/storage.dll16,enable_win16)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/stress.dll16,enable_win16)
|
WINE_CONFIG_MAKEFILE(dlls/stress.dll16,enable_win16)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/strmdll)
|
WINE_CONFIG_MAKEFILE(dlls/strmdll)
|
||||||
|
WINE_CONFIG_MAKEFILE(dlls/structuredquery)
|
||||||
|
WINE_CONFIG_MAKEFILE(dlls/structuredquery/tests)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/svrapi)
|
WINE_CONFIG_MAKEFILE(dlls/svrapi)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/sxs)
|
WINE_CONFIG_MAKEFILE(dlls/sxs)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/sxs/tests)
|
WINE_CONFIG_MAKEFILE(dlls/sxs/tests)
|
||||||
|
|
10
dlls/structuredquery/Makefile.in
Normal file
10
dlls/structuredquery/Makefile.in
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
MODULE = structuredquery.dll
|
||||||
|
IMPORTLIB = structuredquery
|
||||||
|
IMPORTS = ole32 oleaut32 uuid
|
||||||
|
|
||||||
|
EXTRADLLFLAGS = -Wb,--prefer-native
|
||||||
|
SOURCES = \
|
||||||
|
classes.idl \
|
||||||
|
main.c \
|
||||||
|
queryparser.c \
|
||||||
|
queryparsermanager.c
|
37
dlls/structuredquery/classes.idl
Normal file
37
dlls/structuredquery/classes.idl
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Vibhav Pant
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma makedep register
|
||||||
|
|
||||||
|
[
|
||||||
|
uuid(b72f8fd8-0fab-4dd9-bdbf-245a6ce1485b),
|
||||||
|
threading(both)
|
||||||
|
]
|
||||||
|
coclass QueryParser
|
||||||
|
{
|
||||||
|
interface IQueryParser;
|
||||||
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
uuid(5088b39a-29b4-4d9d-8245-4ee289222f66),
|
||||||
|
threading(both)
|
||||||
|
]
|
||||||
|
coclass QueryParserManager
|
||||||
|
{
|
||||||
|
interface IQueryParserManager;
|
||||||
|
};
|
155
dlls/structuredquery/main.c
Normal file
155
dlls/structuredquery/main.c
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Vibhav Pant
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define COBJMACROS
|
||||||
|
#include <initguid.h>
|
||||||
|
#include "private.h"
|
||||||
|
|
||||||
|
#include <wine/debug.h>
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL( structquery );
|
||||||
|
|
||||||
|
static const struct class_info
|
||||||
|
{
|
||||||
|
const CLSID *clsid;
|
||||||
|
HRESULT (*constructor)(REFIID, void **);
|
||||||
|
} class_info[] = {
|
||||||
|
{ &CLSID_QueryParser, queryparser_create },
|
||||||
|
{ &CLSID_QueryParserManager, queryparsermanager_create },
|
||||||
|
};
|
||||||
|
|
||||||
|
struct class_factory
|
||||||
|
{
|
||||||
|
IClassFactory iface;
|
||||||
|
LONG ref;
|
||||||
|
const struct class_info *info;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct class_factory *impl_from_IClassFactory( IClassFactory *iface )
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD( iface, struct class_factory, iface );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI factory_QueryInterface( IClassFactory *iface, REFIID iid, void **out )
|
||||||
|
{
|
||||||
|
TRACE( "(%p, %s, %p)\n", iface, debugstr_guid( iid ), out );
|
||||||
|
*out = NULL;
|
||||||
|
|
||||||
|
if (IsEqualGUID( &IID_IUnknown, iid ) ||
|
||||||
|
IsEqualGUID( &IID_IClassFactory, iid ))
|
||||||
|
{
|
||||||
|
*out = iface;
|
||||||
|
IClassFactory_AddRef( iface );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
FIXME( "Interface not implemented, returning E_NOINTERFACE.\n" );
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI factory_AddRef( IClassFactory *iface )
|
||||||
|
{
|
||||||
|
struct class_factory *impl = impl_from_IClassFactory( iface );
|
||||||
|
TRACE( "(%p)\n", iface );
|
||||||
|
return InterlockedIncrement( &impl->ref );
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI factory_Release( IClassFactory *iface )
|
||||||
|
{
|
||||||
|
struct class_factory *impl = impl_from_IClassFactory( iface );
|
||||||
|
ULONG ref;
|
||||||
|
|
||||||
|
TRACE( "(%p)\n", iface );
|
||||||
|
ref = InterlockedDecrement( &impl->ref );
|
||||||
|
if (!ref)
|
||||||
|
free( impl );
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI factory_CreateInstance( IClassFactory *iface, IUnknown *outer, REFIID iid,
|
||||||
|
void **out )
|
||||||
|
{
|
||||||
|
struct class_factory *impl;
|
||||||
|
|
||||||
|
TRACE( "(%p, %p, %s, %p)\n", iface, outer, debugstr_guid( iid ), out );
|
||||||
|
impl = impl_from_IClassFactory( iface );
|
||||||
|
|
||||||
|
if (!iid || !out)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
if (outer)
|
||||||
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
|
||||||
|
*out = NULL;
|
||||||
|
return impl->info->constructor( iid, out );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI factory_LockServer( IClassFactory *iface, BOOL lock )
|
||||||
|
{
|
||||||
|
TRACE( "(%p, %d\n)", iface, lock );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
const static IClassFactoryVtbl factory_vtbl =
|
||||||
|
{
|
||||||
|
/* IUnknown */
|
||||||
|
factory_QueryInterface,
|
||||||
|
factory_AddRef,
|
||||||
|
factory_Release,
|
||||||
|
/* IClassFactory */
|
||||||
|
factory_CreateInstance,
|
||||||
|
factory_LockServer
|
||||||
|
};
|
||||||
|
|
||||||
|
static HRESULT factory_create( const struct class_info *info, REFIID iid, void **obj )
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
struct class_factory *impl;
|
||||||
|
|
||||||
|
impl = calloc( 1, sizeof( *impl ) );
|
||||||
|
if (!impl)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
impl->iface.lpVtbl = &factory_vtbl;
|
||||||
|
impl->info = info;
|
||||||
|
impl->ref = 1;
|
||||||
|
|
||||||
|
hr = IClassFactory_QueryInterface( &impl->iface, iid, obj );
|
||||||
|
IClassFactory_Release( &impl->iface );
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI DllGetClassObject( REFCLSID clsid, REFIID iid, void **out )
|
||||||
|
{
|
||||||
|
SIZE_T i;
|
||||||
|
|
||||||
|
TRACE( "(%s, %s, %p)\n", debugstr_guid( clsid ), debugstr_guid( iid ), out );
|
||||||
|
|
||||||
|
if (!clsid || !iid || !out)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
*out = NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE( class_info ); i++)
|
||||||
|
{
|
||||||
|
if (IsEqualCLSID( class_info[i].clsid, clsid ))
|
||||||
|
return factory_create( &class_info[i], iid, out );
|
||||||
|
}
|
||||||
|
|
||||||
|
FIXME("Class not implemented, returning CLASS_E_CLASSNOTAVAILABLE.\n");
|
||||||
|
return CLASS_E_CLASSNOTAVAILABLE;
|
||||||
|
}
|
25
dlls/structuredquery/private.h
Normal file
25
dlls/structuredquery/private.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Vibhav Pant
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WINE_STRUCTUREDQUERY_PRIVATE_H__
|
||||||
|
#define __WINE_STRUCTUREDQUERY_PRIVATE_H__
|
||||||
|
#include <structuredquery.h>
|
||||||
|
|
||||||
|
extern HRESULT queryparser_create( REFIID iid, void **out );
|
||||||
|
extern HRESULT queryparsermanager_create( REFIID iid, void **out );
|
||||||
|
#endif
|
167
dlls/structuredquery/queryparser.c
Normal file
167
dlls/structuredquery/queryparser.c
Normal file
|
@ -0,0 +1,167 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Vibhav Pant
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define COBJMACROS
|
||||||
|
#include "private.h"
|
||||||
|
|
||||||
|
#include <wine/debug.h>
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL( structquery );
|
||||||
|
|
||||||
|
struct queryparser
|
||||||
|
{
|
||||||
|
IQueryParser iface;
|
||||||
|
PROPVARIANT options[SQSO_CONNECTOR_CASE];
|
||||||
|
LONG ref;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct queryparser *impl_from_IQueryParser( IQueryParser *iface )
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD( iface, struct queryparser, iface );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_QueryInterface( IQueryParser *iface, REFIID iid, void **out )
|
||||||
|
{
|
||||||
|
TRACE( "(%p, %s, %p)\n", iface, debugstr_guid( iid ), out );
|
||||||
|
|
||||||
|
*out = NULL;
|
||||||
|
if (IsEqualGUID( &IID_IUnknown, iid ) ||
|
||||||
|
IsEqualGUID( &IID_IQueryParser, iid ))
|
||||||
|
{
|
||||||
|
*out = iface;
|
||||||
|
IUnknown_AddRef( iface );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
FIXME( "interface not implemented, returning E_NOINTERFACE\n" );
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI queryparser_AddRef( IQueryParser *iface )
|
||||||
|
{
|
||||||
|
struct queryparser *impl;
|
||||||
|
TRACE( "(%p)\n", iface );
|
||||||
|
|
||||||
|
impl = impl_from_IQueryParser( iface );
|
||||||
|
return InterlockedIncrement( &impl->ref );
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI queryparser_Release( IQueryParser *iface )
|
||||||
|
{
|
||||||
|
struct queryparser *impl;
|
||||||
|
ULONG ref;
|
||||||
|
|
||||||
|
TRACE( "(%p)\n", iface );
|
||||||
|
|
||||||
|
impl = impl_from_IQueryParser( iface );
|
||||||
|
ref = InterlockedDecrement( &impl->ref );
|
||||||
|
if (!ref)
|
||||||
|
free( impl );
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_Parse( IQueryParser *iface, LPCWSTR input,
|
||||||
|
IEnumUnknown *custom_props, IQuerySolution **solution )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %s, %p, %p) stub!\n", iface, debugstr_w( input ), custom_props, solution );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_SetOption( IQueryParser *iface,
|
||||||
|
STRUCTURED_QUERY_SINGLE_OPTION option,
|
||||||
|
const PROPVARIANT *val )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %d, %p) stub!\n", iface, option, val );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_GetOption( IQueryParser *iface,
|
||||||
|
STRUCTURED_QUERY_SINGLE_OPTION option,
|
||||||
|
PROPVARIANT *val )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %d, %p) stub!\n", iface, option, val );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_SetMultiOption( IQueryParser *iface,
|
||||||
|
STRUCTURED_QUERY_MULTIOPTION opt, LPCWSTR key,
|
||||||
|
const PROPVARIANT *val )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %d, %s, %p) stub!\n", iface, opt, debugstr_w( key ), val );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_GetSchemaProvider( IQueryParser *iface,
|
||||||
|
ISchemaProvider **provider )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %p) stub!\n", iface, provider );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_RestateToString( IQueryParser *iface, ICondition *cond,
|
||||||
|
BOOL english, LPWSTR *query )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %p, %d, %p) stub!\n", iface, cond, english, query );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_ParsePropertyValue( IQueryParser *iface, LPCWSTR property,
|
||||||
|
LPCWSTR input, IQuerySolution **solution )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %s, %s, %p) stub!\n", iface, debugstr_w( property ), debugstr_w( input ),
|
||||||
|
solution );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparser_RestatePropertyValueToString( IQueryParser *iface,
|
||||||
|
ICondition *cond, BOOL english,
|
||||||
|
LPWSTR *name, LPWSTR *query )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %p, %d, %p, %p) stub!\n", iface, cond, english, name, query );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const static IQueryParserVtbl queryparser_vtbl =
|
||||||
|
{
|
||||||
|
/* IUnknown */
|
||||||
|
queryparser_QueryInterface,
|
||||||
|
queryparser_AddRef,
|
||||||
|
queryparser_Release,
|
||||||
|
/* IQueryParser */
|
||||||
|
queryparser_Parse,
|
||||||
|
queryparser_SetOption,
|
||||||
|
queryparser_GetOption,
|
||||||
|
queryparser_SetMultiOption,
|
||||||
|
queryparser_GetSchemaProvider,
|
||||||
|
queryparser_RestateToString,
|
||||||
|
queryparser_ParsePropertyValue,
|
||||||
|
queryparser_RestatePropertyValueToString,
|
||||||
|
};
|
||||||
|
|
||||||
|
HRESULT queryparser_create( REFIID iid, void **out )
|
||||||
|
{
|
||||||
|
struct queryparser *impl;
|
||||||
|
|
||||||
|
impl = calloc( 1, sizeof( *impl ) );
|
||||||
|
if (!impl)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
impl->iface.lpVtbl = &queryparser_vtbl;
|
||||||
|
impl->ref = 1;
|
||||||
|
*out = &impl->iface;
|
||||||
|
return S_OK;
|
||||||
|
}
|
126
dlls/structuredquery/queryparsermanager.c
Normal file
126
dlls/structuredquery/queryparsermanager.c
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Vibhav Pant
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define COBJMACROS
|
||||||
|
#include "private.h"
|
||||||
|
|
||||||
|
#include <wine/debug.h>
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL( structquery );
|
||||||
|
|
||||||
|
struct queryparsermanager
|
||||||
|
{
|
||||||
|
IQueryParserManager iface;
|
||||||
|
LONG ref;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct queryparsermanager *impl_from_IQueryParserManager( IQueryParserManager *iface )
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD( iface, struct queryparsermanager, iface );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparsermanager_QueryInterface( IQueryParserManager *iface, REFIID iid, void **out )
|
||||||
|
{
|
||||||
|
TRACE( "(%p, %s, %p)\n", iface, debugstr_guid( iid ), out );
|
||||||
|
|
||||||
|
*out = NULL;
|
||||||
|
if (IsEqualGUID( &IID_IUnknown, iid ) ||
|
||||||
|
IsEqualGUID( &IID_IQueryParserManager, iid ))
|
||||||
|
{
|
||||||
|
*out = iface;
|
||||||
|
IUnknown_AddRef( iface );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
FIXME( "interface not implemented, returning E_NOINTERFACE\n" );
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI queryparsermanager_AddRef( IQueryParserManager *iface )
|
||||||
|
{
|
||||||
|
struct queryparsermanager *impl;
|
||||||
|
TRACE( "(%p)\n", iface );
|
||||||
|
|
||||||
|
impl = impl_from_IQueryParserManager( iface );
|
||||||
|
return InterlockedIncrement( &impl->ref );
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI queryparsermanager_Release( IQueryParserManager *iface )
|
||||||
|
{
|
||||||
|
struct queryparsermanager *impl;
|
||||||
|
ULONG ref;
|
||||||
|
|
||||||
|
TRACE( "(%p)\n", iface );
|
||||||
|
|
||||||
|
impl = impl_from_IQueryParserManager( iface );
|
||||||
|
ref = InterlockedDecrement( &impl->ref );
|
||||||
|
if (!ref)
|
||||||
|
free( impl );
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparsermanager_CreateLoadedParser( IQueryParserManager *iface,
|
||||||
|
LPCWSTR catalog, LANGID langid,
|
||||||
|
REFIID iid, void **out )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %s, %d, %s, %p) stub!\n", iface, debugstr_w( catalog ), langid,
|
||||||
|
debugstr_guid( iid ), out );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparsermanager_InitializeOptions( IQueryParserManager *iface, BOOL nqs,
|
||||||
|
BOOL auto_wildcard,
|
||||||
|
IQueryParser *parser )
|
||||||
|
{
|
||||||
|
FIXME( "(%p, %d, %d, %p) stub!\n", iface, nqs, auto_wildcard, parser );
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI queryparsermanager_SetOption( IQueryParserManager *iface,
|
||||||
|
QUERY_PARSER_MANAGER_OPTION opt,
|
||||||
|
const PROPVARIANT *val )
|
||||||
|
{
|
||||||
|
FIXME("(%p, %d, %p) stub!\n", iface, opt, val);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const static IQueryParserManagerVtbl queryparsermanager_vtbl =
|
||||||
|
{
|
||||||
|
/* IUnknown */
|
||||||
|
queryparsermanager_QueryInterface,
|
||||||
|
queryparsermanager_AddRef,
|
||||||
|
queryparsermanager_Release,
|
||||||
|
/* IQueryParserManager */
|
||||||
|
queryparsermanager_CreateLoadedParser,
|
||||||
|
queryparsermanager_InitializeOptions,
|
||||||
|
queryparsermanager_SetOption,
|
||||||
|
};
|
||||||
|
|
||||||
|
HRESULT queryparsermanager_create( REFIID iid, void **out )
|
||||||
|
{
|
||||||
|
struct queryparsermanager *impl;
|
||||||
|
|
||||||
|
impl = calloc( 1, sizeof( *impl ) );
|
||||||
|
if (!impl)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
impl->iface.lpVtbl = &queryparsermanager_vtbl;
|
||||||
|
impl->ref = 1;
|
||||||
|
*out = &impl->iface;
|
||||||
|
return S_OK;
|
||||||
|
}
|
4
dlls/structuredquery/structuredquery.spec
Normal file
4
dlls/structuredquery/structuredquery.spec
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
@ stdcall -private DllCanUnloadNow()
|
||||||
|
@ stdcall -private DllGetClassObject(ptr ptr ptr)
|
||||||
|
@ stdcall -private DllRegisterServer()
|
||||||
|
@ stdcall -private DllUnregisterServer()
|
5
dlls/structuredquery/tests/Makefile.in
Normal file
5
dlls/structuredquery/tests/Makefile.in
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
TESTDLL = structuredquery.dll
|
||||||
|
IMPORTS = ole32 oleaut32
|
||||||
|
|
||||||
|
SOURCES = \
|
||||||
|
query.c
|
74
dlls/structuredquery/tests/query.c
Normal file
74
dlls/structuredquery/tests/query.c
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Vibhav Pant
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define COBJMACROS
|
||||||
|
#include <initguid.h>
|
||||||
|
#include <structuredquery.h>
|
||||||
|
|
||||||
|
#include <wine/test.h>
|
||||||
|
|
||||||
|
void test_IQueryParser( void )
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
IQueryParser *parser = NULL;
|
||||||
|
|
||||||
|
hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
|
||||||
|
ok( SUCCEEDED( hr ), "got %#lx\n", hr );
|
||||||
|
|
||||||
|
hr = CoCreateInstance( &CLSID_QueryParser, NULL, CLSCTX_INPROC, &IID_IQueryParser,
|
||||||
|
(void **)&parser );
|
||||||
|
ok( SUCCEEDED( hr ), "got %#lx\n", hr );
|
||||||
|
|
||||||
|
if (!parser)
|
||||||
|
{
|
||||||
|
skip( "Could not create IQueryParser instance.\n" );
|
||||||
|
CoUninitialize();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IQueryParser_Release( parser );
|
||||||
|
CoUninitialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_IQueryParserManager( void )
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
IQueryParserManager *manager = NULL;
|
||||||
|
|
||||||
|
hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
|
||||||
|
ok( SUCCEEDED( hr ), "got %#lx\n", hr );
|
||||||
|
|
||||||
|
hr = CoCreateInstance( &CLSID_QueryParserManager, NULL, CLSCTX_INPROC, &IID_IQueryParserManager,
|
||||||
|
(void **)&manager );
|
||||||
|
ok( SUCCEEDED( hr ), "got %#lx\n", hr );
|
||||||
|
if (!manager)
|
||||||
|
{
|
||||||
|
skip( "Could not create IQueryParserManager instance.\n" );
|
||||||
|
CoUninitialize();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IQueryParserManager_Release( manager );
|
||||||
|
CoUninitialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
START_TEST(query)
|
||||||
|
{
|
||||||
|
test_IQueryParser();
|
||||||
|
test_IQueryParserManager();
|
||||||
|
}
|
|
@ -747,6 +747,7 @@ SOURCES = \
|
||||||
strmif.idl \
|
strmif.idl \
|
||||||
strongname.h \
|
strongname.h \
|
||||||
strsafe.h \
|
strsafe.h \
|
||||||
|
structuredquery.idl \
|
||||||
structuredquerycondition.idl \
|
structuredquerycondition.idl \
|
||||||
svrapi.h \
|
svrapi.h \
|
||||||
synchapi.h \
|
synchapi.h \
|
||||||
|
|
315
include/structuredquery.idl
Normal file
315
include/structuredquery.idl
Normal file
|
@ -0,0 +1,315 @@
|
||||||
|
/*
|
||||||
|
* Structured Query support
|
||||||
|
*
|
||||||
|
* Copyright 2024 Vibhav Pant
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
import "structuredquerycondition.idl";
|
||||||
|
import "objectarray.idl";
|
||||||
|
|
||||||
|
cpp_quote("#if 0")
|
||||||
|
typedef PROPERTYKEY *REFPROPERTYKEY;
|
||||||
|
cpp_quote("#endif")
|
||||||
|
cpp_quote("#include <propkeydef.h>")
|
||||||
|
|
||||||
|
typedef [v1_enum] enum tagSTRUCTURED_QUERY_SINGLE_OPTION
|
||||||
|
{
|
||||||
|
SQSO_SCHEMA,
|
||||||
|
SQSO_LOCALE_WORD_BREAKING,
|
||||||
|
SQSO_WORD_BREAKER,
|
||||||
|
SQSO_NATURAL_SYNTAX,
|
||||||
|
SQSO_AUTOMATIC_WILDCARD,
|
||||||
|
SQSO_TRACE_LEVEL,
|
||||||
|
SQSO_LANGUAGE_KEYWORDS,
|
||||||
|
SQSO_SYNTAX,
|
||||||
|
SQSO_TIME_ZONE,
|
||||||
|
SQSO_IMPLICIT_CONNECTOR,
|
||||||
|
SQSO_CONNECTOR_CASE,
|
||||||
|
} STRUCTURED_QUERY_SINGLE_OPTION;
|
||||||
|
|
||||||
|
typedef [v1_enum] enum tagSTRUCTURED_QUERY_MULTIOPTION
|
||||||
|
{
|
||||||
|
SQMO_VIRTUAL_PROPERTY,
|
||||||
|
SQMO_DEFAULT_PROPERTY,
|
||||||
|
SQMO_GENERATOR_FOR_TYPE,
|
||||||
|
SQMO_MAP_PROPERTY,
|
||||||
|
} STRUCTURED_QUERY_MULTIOPTION;
|
||||||
|
|
||||||
|
typedef [v1_enum] enum STRUCTURED_QUERY_RESOLVE_OPTION
|
||||||
|
{
|
||||||
|
SQRO_DEFAULT = 0,
|
||||||
|
SQRO_DONT_RESOLVE_DATETIME = 0x0001,
|
||||||
|
SQRO_ALWAYS_ONE_INTERVAL = 0x0002,
|
||||||
|
SQRO_DONT_SIMPLIFY_CONDITION_TREES = 0x0004,
|
||||||
|
SQRO_DONT_MAP_RELATIONS = 0x0008,
|
||||||
|
SQRO_DONT_RESOLVE_RANGES = 0x0010,
|
||||||
|
SQRO_DONT_REMOVE_UNRESTRICTED_KEYWORDS = 0x0020,
|
||||||
|
SQRO_DONT_SPLIT_WORDS = 0x0040,
|
||||||
|
SQRO_IGNORE_PHRASE_ORDER = 0x0080,
|
||||||
|
SQRO_ADD_VALUE_TYPE_FOR_PLAIN_VALUES = 0x0100,
|
||||||
|
SQRO_ADD_ROBUST_ITEM_NAME = 0x0200,
|
||||||
|
} STRUCTURED_QUERY_RESOLVE_OPTION;
|
||||||
|
cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(STRUCTURED_QUERY_RESOLVE_OPTION);")
|
||||||
|
|
||||||
|
interface IQueryParser;
|
||||||
|
interface IQuerySolution;
|
||||||
|
interface IConditionFactory;
|
||||||
|
interface IConditionFactory2;
|
||||||
|
interface ITokenCollection;
|
||||||
|
interface IRelationship;
|
||||||
|
interface IEntity;
|
||||||
|
interface INamedEntity;
|
||||||
|
interface ISchemaLocalizerSupport;
|
||||||
|
interface ISchemaProvider;
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(2ebdee67-3505-43f8-9946-ea44abc8e5b0)
|
||||||
|
]
|
||||||
|
interface IQueryParser : IUnknown
|
||||||
|
{
|
||||||
|
HRESULT Parse([in] LPCWSTR input, [in] IEnumUnknown *custom_props, [out, retval] IQuerySolution **solution);
|
||||||
|
HRESULT SetOption([in] STRUCTURED_QUERY_SINGLE_OPTION option, [in] const PROPVARIANT *val);
|
||||||
|
HRESULT GetOption([in] STRUCTURED_QUERY_SINGLE_OPTION option, [out, retval] PROPVARIANT *val);
|
||||||
|
HRESULT SetMultiOption([in] STRUCTURED_QUERY_MULTIOPTION option, [in] LPCWSTR key, [in] const PROPVARIANT *val);
|
||||||
|
HRESULT GetSchemaProvider([out, retval] ISchemaProvider **provider);
|
||||||
|
HRESULT RestateToString([in] ICondition *cond, [in] BOOL english, [out] LPWSTR *query);
|
||||||
|
HRESULT ParsePropertyValue([in] LPCWSTR property, [in] LPCWSTR input, [out, retval] IQuerySolution **solution);
|
||||||
|
HRESULT RestatePropertyValueToString([in] ICondition* cond, [in] BOOL english, [out] LPWSTR *name,
|
||||||
|
[out] LPWSTR *query);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef [v1_enum] enum tagQUERY_PARSER_MANAGER_OPTION
|
||||||
|
{
|
||||||
|
QPMO_SCHEMA_BINARY_NAME,
|
||||||
|
QPMO_PRELOCALIZED_SCHEMA_BINARY_PATH,
|
||||||
|
QPMO_UNLOCALIZED_SCHEMA_BINARY_PATH,
|
||||||
|
QPMO_LOCALIZED_SCHEMA_BINARY_PATH,
|
||||||
|
QPMO_APPEND_LCID_TO_LOCALIZED_PATH,
|
||||||
|
QPMO_LOCALIZER_SUPPORT,
|
||||||
|
} QUERY_PARSER_MANAGER_OPTION;
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(a879e3c4-af77-44fb-8f37-ebd1487cf920),
|
||||||
|
]
|
||||||
|
interface IQueryParserManager : IUnknown
|
||||||
|
{
|
||||||
|
/* ID should be IID_IQueryParser */
|
||||||
|
HRESULT CreateLoadedParser([in] LPCWSTR catalog, [in] LANGID langid, [in] REFIID riid,
|
||||||
|
[out, retval, iid_is(riid)] void **out);
|
||||||
|
HRESULT InitializeOptions([in] BOOL nqs, [in] BOOL auto_wild_card, [in] IQueryParser *parser);
|
||||||
|
HRESULT SetOption([in] QUERY_PARSER_MANAGER_OPTION opt, [in] const PROPVARIANT *val);
|
||||||
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
uuid(D6EBC66B-8921-4193-AFDD-A1789FB7FF57),
|
||||||
|
pointer_default(unique)
|
||||||
|
]
|
||||||
|
interface IQuerySolution : IConditionFactory
|
||||||
|
{
|
||||||
|
[local]
|
||||||
|
HRESULT GetQuery([out] ICondition **cond, [out] IEntity **main);
|
||||||
|
/* ID can be IID_IEnumUnknown and IID_IEnumVARIANT */
|
||||||
|
HRESULT GetErrors([in] REFIID riid, [out, retval, iid_is(riid)] void **out);
|
||||||
|
[local]
|
||||||
|
HRESULT GetLexicalData([out] LPWSTR *input, [out] ITokenCollection **tokens, [out] LCID *lcid,
|
||||||
|
[out] IUnknown **breaker);
|
||||||
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(A5EFE073-B16F-474f-9F3E-9f8b497a3e08)
|
||||||
|
]
|
||||||
|
interface IConditionFactory : IUnknown
|
||||||
|
{
|
||||||
|
HRESULT MakeNot([in] ICondition *cond, [in] BOOL simplify, [out, retval] ICondition **result);
|
||||||
|
HRESULT MakeAndOr([in] CONDITION_TYPE type, [in] IEnumUnknown *conditions, [in] BOOL simplify,
|
||||||
|
[out, retval] ICondition **result);
|
||||||
|
HRESULT MakeLeaf([in, unique] LPCWSTR prop, [in] CONDITION_OPERATION cop, [in, unique] LPCWSTR val_type,
|
||||||
|
[in] const PROPVARIANT *prop_var, [in] IRichChunk *prop_term, [in] IRichChunk *op_term,
|
||||||
|
[in] IRichChunk *value_term, [in] BOOL expand, [out, retval] ICondition **result);
|
||||||
|
[local]
|
||||||
|
HRESULT Resolve([in] ICondition *cond, [in] STRUCTURED_QUERY_RESOLVE_OPTION opt, [in, ref] const SYSTEMTIME *time,
|
||||||
|
[out, retval] ICondition **result);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef [v1_enum] enum CONDITION_CREATION_OPTIONS
|
||||||
|
{
|
||||||
|
CONDITION_CREATION_DEFAULT = 0,
|
||||||
|
CONDITION_CREATION_NONE = 0,
|
||||||
|
CONDITION_CREATION_SIMPLIFY = 0x01,
|
||||||
|
CONDITION_CREATION_VECTOR_AND = 0x02,
|
||||||
|
CONDITION_CREATION_VECTOR_OR = 0x04,
|
||||||
|
CONDITION_CREATION_VECTOR_LEAF = 0x08,
|
||||||
|
CONDITION_CREATION_USE_CONTENT_LOCALE = 0x10,
|
||||||
|
} CONDITION_CREATION_OPTIONS;
|
||||||
|
cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( CONDITION_CREATION_OPTIONS );")
|
||||||
|
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(71d222e1-432f-429e-8c13-b6dafde5077a),
|
||||||
|
local
|
||||||
|
]
|
||||||
|
interface IConditionFactory2 : IConditionFactory
|
||||||
|
{
|
||||||
|
HRESULT CreateTrueFalse([in] BOOL val, [in] CONDITION_CREATION_OPTIONS opts, [in] REFIID riid,
|
||||||
|
[out, iid_is(riid)] void **out);
|
||||||
|
HRESULT CreateNegation([in] ICondition *cond, [in] CONDITION_CREATION_OPTIONS opts, [in] REFIID riid,
|
||||||
|
[out, iid_is(riid)] void **out);
|
||||||
|
HRESULT CreateCompoundFromObjectArray([in] CONDITION_TYPE type, [in] IObjectArray *conditions,
|
||||||
|
[in] CONDITION_CREATION_OPTIONS opts, [in] REFIID riid,
|
||||||
|
[out, iid_is(riid)] void **out);
|
||||||
|
HRESULT CreateCompoundFromArray([in] CONDITION_TYPE type, [in, size_is(cond_count)] ICondition **conditions,
|
||||||
|
[in] ULONG cond_count, [in] CONDITION_CREATION_OPTIONS opts, [in] REFIID riid,
|
||||||
|
[out, iid_is(riid)] void **out);
|
||||||
|
HRESULT CreateStringLeaf([in] REFPROPERTYKEY propkey, [in] CONDITION_OPERATION op, [in] LPCWSTR val,
|
||||||
|
[in] LPCWSTR locale, [in] CONDITION_CREATION_OPTIONS opts, [in] REFIID riid,
|
||||||
|
[out, iid_is(riid)] void **out);
|
||||||
|
HRESULT CreateIntegerLeaf([in] REFPROPERTYKEY propkey, [in] CONDITION_OPERATION op, [in] INT32 val,
|
||||||
|
[in] CONDITION_CREATION_OPTIONS opts, [in] REFIID riid, [out, iid_is(riid)] void **out);
|
||||||
|
HRESULT CreateBooleanLeaf([in] REFPROPERTYKEY propkey, [in] CONDITION_OPERATION op, [in] BOOL val,
|
||||||
|
[in] CONDITION_CREATION_OPTIONS opts, [in] REFIID riid, [out, iid_is(riid)] void **out);
|
||||||
|
HRESULT CreateLeaf([in] REFPROPERTYKEY propkey, [in] CONDITION_OPERATION op, [in] REFPROPVARIANT prop_var,
|
||||||
|
[in] LPCWSTR type, [in] LPCWSTR locale, [in] IRichChunk *prop_name_term, [in] IRichChunk *op_term,
|
||||||
|
[in] IRichChunk *val_term, [in] CONDITION_CREATION_OPTIONS cco, [in] REFIID riid,
|
||||||
|
[out, iid_is(riid)] void **out);
|
||||||
|
HRESULT ResolveCondition([in] ICondition *cond, [in] STRUCTURED_QUERY_RESOLVE_OPTION opt, [in] const SYSTEMTIME *time,
|
||||||
|
[in] REFIID riid, [out, iid_is(riid)] void **out);
|
||||||
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(22d8b4f2-f577-4adb-a335-c2ae88416fab),
|
||||||
|
]
|
||||||
|
interface ITokenCollection : IUnknown
|
||||||
|
{
|
||||||
|
HRESULT NumberOfTokens([out] ULONG *num);
|
||||||
|
[local]
|
||||||
|
HRESULT GetToken([in] ULONG i, [out] ULONG *begin, [out] ULONG *len, [out] LPWSTR *token_str);
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(2769280b-5108-498c-9c7f-a51239b63147),
|
||||||
|
]
|
||||||
|
interface IRelationship : IUnknown
|
||||||
|
{
|
||||||
|
[local]
|
||||||
|
HRESULT Name([out, retval] LPWSTR *name);
|
||||||
|
HRESULT IsReal([out, retval] BOOL *real);
|
||||||
|
HRESULT Destination([out, retval] IEntity **dest);
|
||||||
|
/* ID can be be IID_IEnumUnknown or IID_IEnumVARIANT */
|
||||||
|
HRESULT MetaData([in] REFIID riid, [out, retval, iid_is(riid)] void **out);
|
||||||
|
[local]
|
||||||
|
HRESULT DefaultPhrase([out, retval] LPWSTR *phrase);
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(24264891-e80b-4fd3-b7ce-4ff2fae8931f),
|
||||||
|
]
|
||||||
|
interface IEntity : IUnknown
|
||||||
|
{
|
||||||
|
[local]
|
||||||
|
HRESULT Name([out, retval] LPWSTR *name);
|
||||||
|
HRESULT Base([out, retval] IEntity **base);
|
||||||
|
/* ID can be IID_IEnumUnknown or IID_IEnumVARIANT. */
|
||||||
|
HRESULT Relationships([in] REFIID riid, [out, retval, iid_is(riid)] void **out);
|
||||||
|
HRESULT GetRelationship([in] LPCWSTR name, [out, retval] IRelationship **relation);
|
||||||
|
HRESULT MetaData([in] REFIID riid, [out, retval, iid_is(riid)] void **out);
|
||||||
|
/* ID can be IID_IEnumUnknown or IID_IEnumVARIANT. */
|
||||||
|
HRESULT NamedEntities([in] REFIID riid, [out, retval, iid_is(riid)] void **out);
|
||||||
|
HRESULT GetNamedEntity([in] LPCWSTR name, [out, retval] INamedEntity **entity);
|
||||||
|
[local]
|
||||||
|
HRESULT DefaultPhrase([out, retval] LPWSTR *phrase);
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(abdbd0b1-7d54-49fb-ab5c-bff4130004cd),
|
||||||
|
]
|
||||||
|
interface INamedEntity : IUnknown
|
||||||
|
{
|
||||||
|
HRESULT GetValue([out, retval] LPWSTR *value);
|
||||||
|
[local]
|
||||||
|
HRESULT DefaultPhrase([out, retval] LPWSTR *phrase);
|
||||||
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(ca3fdca2-bfbe-4eed-90d7-0caef0a1bda1),
|
||||||
|
]
|
||||||
|
interface ISchemaLocalizerSupport : IUnknown
|
||||||
|
{
|
||||||
|
HRESULT Localize([in] LPCWSTR str, [out, retval] LPWSTR *str_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(8cf89bcb-394c-49b2-ae28-a59dd4ed7f68),
|
||||||
|
]
|
||||||
|
interface ISchemaProvider : IUnknown
|
||||||
|
{
|
||||||
|
/* ID can be be IID_IEnumUnknown or IID_IEnumVARIANT */
|
||||||
|
HRESULT Entities([in] REFIID riid, [out, retval, iid_is(riid)] void** out);
|
||||||
|
HRESULT RootEntity([out, retval] IEntity **root);
|
||||||
|
HRESULT GetEntity([in] LPCWSTR name, [out, retval] IEntity **entity);
|
||||||
|
/* ID can be be IID_IEnumUnknown or IID_IEnumVARIANT */
|
||||||
|
HRESULT MetaData([in] REFIID riid, [out, retval, iid_is(riid)] void** out);
|
||||||
|
HRESULT Localize([in] LCID lcid, [in] ISchemaLocalizerSupport *support);
|
||||||
|
HRESULT SaveBinary([in] LPCWSTR path);
|
||||||
|
HRESULT LookupAuthoredNamedEntity([in] IEntity *entity, [in] LPCWSTR input, [in] ITokenCollection *tokens,
|
||||||
|
[in] ULONG begin, [out] ULONG *len, [out] LPWSTR *val);
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
uuid(1352fa67-2022-41df-9d6f-943a5ee97c9f),
|
||||||
|
version(1.0)
|
||||||
|
]
|
||||||
|
library StructuredQuery1
|
||||||
|
{
|
||||||
|
[
|
||||||
|
uuid(b72f8fd8-0fab-4dd9-bdbf-245a6ce1485b)
|
||||||
|
]
|
||||||
|
coclass QueryParser
|
||||||
|
{
|
||||||
|
interface IQueryParser;
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
uuid(5088b39a-29b4-4d9d-8245-4ee289222f66)
|
||||||
|
]
|
||||||
|
coclass QueryParserManager
|
||||||
|
{
|
||||||
|
interface IQueryParserManager;
|
||||||
|
};
|
||||||
|
}
|
|
@ -51,3 +51,46 @@ typedef [v1_enum] enum tagCONDITION_OPERATION
|
||||||
COP_WORD_STARTSWITH,
|
COP_WORD_STARTSWITH,
|
||||||
COP_APPLICATION_SPECIFIC
|
COP_APPLICATION_SPECIFIC
|
||||||
} CONDITION_OPERATION;
|
} CONDITION_OPERATION;
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
pointer_default(unique),
|
||||||
|
uuid(4fdef69c-dbc9-454e-9910-b34f3c64b510),
|
||||||
|
]
|
||||||
|
interface IRichChunk : IUnknown
|
||||||
|
{
|
||||||
|
[local]
|
||||||
|
HRESULT GetData([out, unique] ULONG *first_pos, [out, unique] ULONG *len,
|
||||||
|
[out, unique] LPWSTR *str, [out, unique] PROPVARIANT *val);
|
||||||
|
[call_as(GetData)]
|
||||||
|
HRESULT RemoteGetData([out, unique] ULONG *first_pos, [out, unique] ULONG *len,
|
||||||
|
[out, unique] LPWSTR *str, [out, unique] PROPVARIANT *val);
|
||||||
|
};
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
uuid(0FC988D4-C935-4b97-A973-46282EA175C8),
|
||||||
|
pointer_default(unique),
|
||||||
|
]
|
||||||
|
interface ICondition : IPersistStream
|
||||||
|
{
|
||||||
|
HRESULT GetConditionType([out, retval] CONDITION_TYPE *type);
|
||||||
|
/* ID can be ID IID_IEnumUnknown, IID_IEnumVARIANT IID_IObjectArray, or IID_ICondition. */
|
||||||
|
HRESULT GetSubConditions([in] REFIID riid, [out, retval, iid_is(riid)] void** ppv);
|
||||||
|
[local]
|
||||||
|
HRESULT GetComparisonInfo([out, unique] LPWSTR *prop_name, [out, unique] CONDITION_OPERATION *op,
|
||||||
|
[out, unique] PROPVARIANT *prop_var);
|
||||||
|
[call_as(GetComparisonInfo)]
|
||||||
|
HRESULT RemoteGetComparisonInfo([out, unique] LPWSTR *prop_name, [out, unique] CONDITION_OPERATION *op,
|
||||||
|
[out, unique] PROPVARIANT *prop_var);
|
||||||
|
HRESULT GetValueType([out, retval] LPWSTR *name);
|
||||||
|
HRESULT GetValueNormalization([out, retval] LPWSTR *normalized);
|
||||||
|
[local]
|
||||||
|
HRESULT GetInputTerms([out, unique] IRichChunk **prop_Term, [out, unique] IRichChunk **op_term,
|
||||||
|
[out, unique] IRichChunk **val_term);
|
||||||
|
|
||||||
|
[call_as(GetInputTerms)]
|
||||||
|
HRESULT RemoteGetInputTerms([out, unique] IRichChunk **prop_Term, [out, unique] IRichChunk **op_term,
|
||||||
|
[out, unique] IRichChunk **val_term);
|
||||||
|
HRESULT Clone([out, retval] ICondition **out);
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue