00001 #ifndef FDO_RDBMSOVSCHEMAAUTOGENERATION_H
00002 #define FDO_RDBMSOVSCHEMAAUTOGENERATION_H
00003 //
00004 //
00005 // Copyright (C) 2004-2006 Autodesk, Inc.
00006 //
00007 // This library is free software; you can redistribute it and/or
00008 // modify it under the terms of version 2.1 of the GNU Lesser
00009 // General Public License as published by the Free Software Foundation.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
00019 //
00020
00021 #include <Fdo/Commands/Schema/PhysicalElementMapping.h>
00022 #include <Fdo/Xml/NameCollectionHandler.h>
00023 #include <Rdbms/Override/RdbmsOv.h>
00024
00025 /// <library>
00026 /// FdoRdbms.lib
00027 /// </library>
00028
00029 ///<summary>
00030 ///This class provides directives for reverse-engineering FDO
00031 ///Feature Schema elements from the physical schema of the currently
00032 ///connected datastore.
00033 ///</summary>
00034 class FdoRdbmsOvSchemaAutoGeneration: public FdoPhysicalElementMapping
00035 {
00036
00037 public:
00038 ///<summary>Creates a set of schema autogeneration settings.
00039 ///</summary>
00040 ///<returns>Returns FdoRdbmsOvSchemaAutoGeneration</returns>
00041 FDORDBMS_OV_API static FdoRdbmsOvSchemaAutoGeneration* Create();
00042
00043 ///<summary>Gets the table prefix for autogenerating class definitions.
00044 ///When set, an FDO Class Definition is automatically generated for
00045 ///each table whose name begins with this prefix. Any table already
00046 ///referenced by a class definition is skipped. Each generated class is
00047 ///added to the Feature Schema for this Schema Mapping Set.
00048 ///</summary>
00049 ///<returns>Returns the class autogeneration table name prefix</returns>
00050 FDORDBMS_OV_API FdoString* GetGenTablePrefix();
00051
00052 ///<summary>
00053 ///Sets the table prefix for autogenerating class definitions.
00054 ///</summary>
00055 /// <param name="tablePrefix">
00056 /// Input the table prefix. If L"" then no
00057 /// classes will be generated by table prefix.
00058 /// </param>
00059 ///<returns>Returns nothing</returns>
00060 FDORDBMS_OV_API void SetGenTablePrefix(FdoString* tablePrefix);
00061
00062 ///<summary>Gets the table prefix removal setting. This setting affects
00063 ///how classes, generated from tables matching the table prefix, are named:
00064 /// * when true, the class name is the table name with prefix removed.
00065 /// true is the default setting.
00066 /// * when false, the class name is the table name.
00067 ///</summary>
00068 ///<returns>Returns FdoBoolean.</returns>
00069 FDORDBMS_OV_API FdoBoolean GetRemoveTablePrefix();
00070
00071 ///<summary>Sets the "remove table prefix" setting.</summary>
00072 /// <param name="removeTablePrefix">
00073 /// Input the "remove table prefix" setting.
00074 // </param>
00075 ///<returns>Returns nothing</returns>
00076 FDORDBMS_OV_API void SetRemoveTablePrefix(FdoBoolean removeTablePrefix);
00077
00078 ///<summary>Gets the list of tables or views for which class definitions
00079 ///will be autogenerated. Once retrieved, the caller can populate this
00080 ///list.
00081 ///When set, an FDO Class Definition is automatically generated for
00082 ///each table in this list. Any table already
00083 ///referenced by a class definition is skipped. Each generated class is
00084 ///added to the Feature Schema for this Schema Mapping Set.
00085 ///
00086 ///Note: the only way to autogenerate a class definition from a view
00087 ///is to add the view name to this list. There is one caveat in that
00088 ///the generated class will not have identity properties.
00089 ///</summary>
00090 ///<returns>Returns FdoStringCollection</returns>
00091 FDORDBMS_OV_API FdoStringCollection* GetGenTableList();
00092
00093 ///<summary>Gets the maximum number of rows to sample when table data
00094 ///must be examined to determine schema information. The situations
00095 ///where this must be done depend on the provider. For example,
00096 ///when a geometric property is generated from a geometric column, the
00097 ///geomety types might be determined by examining some of the geometry
00098 ///values in the column.
00099 ///
00100 ///MaxSampleRows can be any positive integer or one of the following:
00101 /// * 0: all rows in the table are sampled. (Not recommended for
00102 /// large datastores).
00103 /// * -1: no rows are sampled.
00104 ///
00105 ///</summary>
00106 ///<returns>Returns FdoBoolean.</returns>
00107 FDORDBMS_OV_API FdoInt32 GetMaxSampleRows();
00108
00109 ///<summary>Sets the maximum number of rows to sample when
00110 ///determining schema from table data. Higher values give a more
00111 ///accurate result but lower values provide better performance.</summary>
00112 /// <param name="maxRows">Input the maximum number of rows to sample.</param>
00113 ///<returns>Returns nothing</returns>
00114 FDORDBMS_OV_API void SetMaxSampleRows(FdoInt32 maxRows);
00115
00116 //DOM-IGNORE-BEGIN
00117 // Initialize this element from its XML attributes
00118 virtual void InitFromXml(FdoXmlSaxContext* pContext, FdoXmlAttributeCollection* attrs);
00119
00120 // Serialize this property to XML.
00121 virtual void _writeXml(FdoXmlWriter* xmlWriter, const FdoXmlFlags* flags);
00122 //DOM-IGNORE-END
00123
00124 protected:
00125 FdoRdbmsOvSchemaAutoGeneration();
00126 virtual ~FdoRdbmsOvSchemaAutoGeneration();
00127 virtual void Dispose();
00128
00129 // Handle the table list.
00130 FdoXmlSaxHandler* XmlStartElement(
00131 FdoXmlSaxContext* context,
00132 FdoString* uri,
00133 FdoString* name,
00134 FdoString* qname,
00135 FdoXmlAttributeCollection* atts
00136 );
00137 private:
00138 FdoStringP mGenTablePrefix;
00139 FdoBoolean mRemoveTablePrefix;
00140 FdoInt32 mMaxSampleRows;
00141
00142 FdoXmlNameCollectionHandlerP mTableListSerializer;
00143 };
00144
00145 ///<summary>FdoRdbmsOvSchemaAutoGenerationP is a FdoPtr on FdoRdbmsOvSchemaAutoGeneration, provided for convenience.</summary>
00146 typedef FdoPtr<FdoRdbmsOvSchemaAutoGeneration> FdoRdbmsOvSchemaAutoGenerationP;
00147
00148 #endif
00149