Мельница данных- Требования к провайдеру (раздел целиком) (19.04.2024) | (одним файлом) |
Требования к провайдеру |
Интерфейсы провайдера описаны в библиотеке типов файла QueryBuilder.exe и в файле QueryBuilder_TLB.pas. Собственно, объект-провайдер реализует Интерфейс IInfoProvider. Каждый CoClass, реализующий указанный интерфейс, прописывается в ветке реестра HKLM\Software\QueryBuilder\Providers добавлением параметра, имя которого определяет наименование провайдера, а значение - CLSID провайдера. Метаданные (информация о таблицах, полях и типах данных) предоставляются в виде именованных элементов, то есть каждый из них реализует интерфейс INamedItemInfo |
1. Интерфейс IInfoProvider |
Провайдер реализует интерфейс 01 IInfoProvider = interface(IUnknown) 02 ['{64F8072B-7250-4C57-BA8E-D018C7B72CC7}'] 03 function Get_TableCount: Integer; safecall; 04 function Get_Table(Index: Integer): ITableInfo; safecall; 05 function Perform(const SQL: WideString): IDataSet; safecall; 06 procedure Connect(const DataBase: WideString; 07 const UserName: WideString; 08 const Password: WideString); safecall; 09 function Get_CLSID: TGUID; safecall; 10 function Get_DateLiteral: WideString; safecall; 11 function Get_TimeLiteral: WideString; safecall; 12 function Get_DateTimeLiteral: WideString; safecall; 13 end;
|
2. Интерфейс IDataSet |
Набор данных реализует интерфейс 1 IDataSet = interface(IUnknown) 2 ['{3CED7395-8482-4EF6-8A15-7744348063C2}'] 3 function Get_FieldCount: Integer; safecall; 4 function Get_FieldName(Index: Integer): WideString; safecall; 5 function Get_Field(FieldIndex: OleVariant): OleVariant; safecall; 6 procedure Next; safecall; 7 function Eof: WordBool; safecall; 8 end;Набор данных представляет собой однонаправленный курсор, каждая строка которого является набором именованных и нумерованных полей.
|
3. Интерфейс INamedItemInfo |
Каждый элемент метаданных (таблица, поле, тип) обязательно реализует интерфейс 1 INamedItemInfo = interface(IUnknown) 2 ['{14894363-28DA-4E71-B0BC-9C5CE811BC8F}'] 3 function Get_Name: WideString; safecall; 4 function Get_Caption: WideString; safecall; 5 function Get_ID: WideString; safecall; 6 end; Именованный элемент имеет имя, наименование и идентификатор. Имя используется для именования сущности в сформированном SQL-запросе, идентификатор необходим для идентификации сущности в рамках провайдера, таблицы и типы данных имеют глобальное пространство идентификаторов, поля имеют уникальные идентификаторы в пределах последовательности наследуемых таблиц. Никаких ограничений на значения идентификаторов, кроме уникальности, не накладывается.
|
4. Интерфейс ITableInfo |
Информация о таблице представляется объектом через интерфейс (наследник INamedItemInfo ) 1 ITableInfo = interface(INamedItemInfo) 2 ['{3FC1998A-9031-4936-82B5-8CAA2219085E}'] 3 function Get_FieldCount: Integer; safecall; 4 function Get_Field(Index: Integer): IFieldInfo; safecall; 5 function Get_PrimaryKey: IFieldInfo; safecall; 6 function Get_Uplink: IFieldInfo; safecall; 7 function Get_Parent: ITableInfo; safecall; 8 end;
|
4.1. Интерфейс ITableInfo2 |
Для таблиц, имеющих полиморфные ссылки, реализуется интерфейс (наследник ITableInfo ) 1 ITableInfo2 = interface(ITableInfo) 2 ['{9DF4C8AC-1DA2-4E7B-BF44-7EDD7A269418}'] 3 function Get_PolymorphCount: Integer; safecall; 4 function Get_PolymorphTable(Index: Integer): ITableInfo; safecall; 5 function Get_PolymorphField(Index: Integer): IFieldInfo; safecall; 6 end;Полиморфной ссылкой является, например, ссылка, физически размещенная в родительской таблице, указывающая на свою запись. Реализация этого интерфейса не является обязательной.
|
4.2. Интерфейс ITableInfo3 |
Для таблиц, при запросах к которым требуется наложение дополнительных условий отбора, реализуется интерфейс (наследник ITableInfo ) 01 ITableInfo3 = interface(ITableInfo) 02 ['{3FB73AA9-010C-48DA-81C7-E1DCFE2E6136}'] 03 function GetPersistentClause(const Alias: WideString): WideString; safecall; 04 function GetPreConditionsCount: Integer; safecall; 05 function GetPreConditionCaption(Index: Integer): WideString; safecall; 06 function GetPreConditionCategory(Index: Integer): WideString; safecall; 07 function Get_ActivePreCondition(Index: Integer): WordBool; safecall; 08 procedure Set_ActivePreCondition(Index: Integer; Value: WordBool); safecall; 09 function GetPreConditionParamsCount(Index: Integer): Integer; safecall; 10 function GetPreConditionParam(Index: Integer; PreConditionIndex: Integer): IOptionInfo; safecall; 11 end;
|
5. Интерфейс IFieldInfo |
Информация о поле поставляется объектом, реализующим интерфейс (наследник INamedItemInfo ) 1 IFieldInfo = interface(INamedItemInfo) 2 ['{19054DAD-8D35-4B39-8EB7-FD3254BD2934}'] 3 function Get_TypeInfo: ITypeInfo; safecall; 4 function Get_DisplayMode: TDisplayMode; safecall; 5 end;
|
6. Интерфейс ITypeInfo |
Информация о типах полей поставляется в виде набора объектов, каждый из которых реализует интерфейс (наследник INamedItemInfo ) 1 ITypeInfo = interface(INamedItemInfo) 2 ['{2B6A5E20-3C36-4574-89DB-7C873A5C4A00}'] 3 function Get_Required: WordBool; safecall; 4 function Get_SimpleType: TSimpleType; safecall; 5 end;Информация о конкретном типе передается при помощи реализации одного из наследников этого интерфейса.
|
6.1. Интерфейс ITypeInfo2 |
Информация о предоставляемых провайдером дополнительных возможностях фильтрации (наследник интерфейса ITypeInfo) 1 ITypeInfo2 = interface(ITypeInfo) 2 ['{77F58BDF-F01C-40F3-B193-1027AD8C4EDA}'] 3 function GetSpecialFilterCount: Integer; safecall; 4 function GetSpecialFilterText(Index: Integer): WideString; safecall; 5 function EditSpecialFilter(Index: Integer; var Filter: WideString): WordBool; safecall; 6 end;
|
6.2. Интерфейс IStringInfo |
Информация о строковом типе (наследник интерфейса ITypeInfo) 1 IStringInfo = interface(ITypeInfo) 2 ['{74AC4C03-E803-421B-B30D-1A2D2C49827F}'] 3 function Get_Length: Integer; safecall; 4 end;
|
6.3. Интерфейс IIntegerInfo |
Информация о целочисленном типе (наследник интерфейса ITypeInfo) 1 IIntegerInfo = interface(ITypeInfo) 2 ['{9003B25E-926D-42AE-A907-813DF3A8343E}'] 3 function Get_MaxValue: Integer; safecall; 4 function Get_MaxValueUsed: WordBool; safecall; 5 function Get_MinValue: Integer; safecall; 6 function Get_MinValueUsed: WordBool; safecall; 7 end;
|
6.4. Интерфейс IFloatInfo |
Информация о вещественном типе (наследник интерфейса ITypeInfo ) 1 IFloatInfo = interface(ITypeInfo) 2 ['{E9B56C6D-47DC-4AB9-9E80-6EEF77708704}'] 3 function Get_MaxValue: Double; safecall; 4 function Get_MaxValueUsed: WordBool; safecall; 5 function Get_MinValue: Double; safecall; 6 function Get_MinValueUsed: WordBool; safecall; 7 function Get_Precision: Integer; safecall; 8 function Get_Scale: Integer; safecall; 9 end;
|
6.5. Интерфейс IDateInfo |
Информация о типе "Дата" (без времени) (наследник интерфейса ITypeInfo ) 1 IDateInfo = interface(ITypeInfo) 2 ['{DA392510-105F-4655-9A38-18ECA2FBEB97}'] 3 end;Не имеет методов. |
6.6. Интерфейс ITimeInfo |
Информация о типе "Время" (без даты) (наследник интерфейса ITypeInfo ) 1 ITimeInfo = interface(ITypeInfo) 2 ['{D7067CAC-67A5-41DB-8D95-40409D8658AB}'] 3 end;Не имеет методов. |
6.7. Интерфейс IDateTimeInfo |
Информация о типе "Дата со времемем" (наследник интерфейса ITypeInfo ) 1 IDateTimeInfo = interface(ITypeInfo) 2 ['{7F5CC8F9-8CE1-4DB7-8932-884EF3BAB538}'] 3 end;Не имеет методов. |
6.8. Интерфейс IBooleanInfo |
Информация о логическом типе (наследник интерфейса ITypeInfo ) 1 IBooleanInfo = interface(ITypeInfo) 2 ['{8256EDF9-8613-4970-850C-50047839D6BF}'] 3 function Get_TrueValue: WideString; safecall; 4 function Get_FalseValue: WideString; safecall; 5 end;
|
6.9. Интерфейс IEnumerationInfo |
Информация о перечислимом типе (наследник интерфейса ITypeInfo ) 1 IEnumerationInfo = interface(ITypeInfo) 2 ['{B58A3F23-1AAC-4420-ADFF-B23B9938A994}'] 3 function Get_ItemCount: Integer; safecall; 4 function Get_Item(Index: Integer): IEnumerationItem; safecall; 5 end;Перечислимый тип определяет набор значений, которые может принимать поле. Значения в таблице трактуются как равные имени элемента перечисления.
|
6.10. Интерфейс IReferenceInfo |
Информация о типе "ссылка" (наследник интерфейса ITypeInfo ) 1 IReferenceInfo = interface(ITypeInfo) 2 ['{309C8CB1-4A1C-4E58-BC3F-D1AF27861A8F}'] 3 function Get_TargetTable: ITableInfo; safecall; 4 end;
|
6.11. Интерфейс IBlobInfo |
Информация о типе "больших двоичных объектов" (наследник интерфейса ITypeInfo ) 1 IBlobInfo = interface(ITypeInfo) 2 ['{3905C9C4-EAEB-4844-BB55-3F524F1F3FAC}'] 3 function Get_SubType: TBlobSubType; safecall; 4 end;
|
7. Интерфейс IEnumerationItem |
Информация об элементе перечисления (наследник INamedItemInfo ) 1 IEnumerationItem = interface(INamedItemInfo) 2 ['{6953507C-D477-4B8D-9443-A9E5FE7137ED}'] 3 function Get_Position: Integer; safecall; 4 end;Значения в таблице трактуются как равные имени элемента перечисления.
|