/// <summary>
        /// Returns a name that can be used as an index identifier name.
        /// </summary>
        /// <param name="objectFactory">The introspection object factory</param>
        /// <param name="databaseServices">The database services</param>
        /// <param name="tableName">Name of the table for which we want to create a trigger</param>
        /// <param name="columns">Columns that will compose the index</param>
        /// <returns>A name that can be used as a sql identifier name</returns>
        public static string GetNewIndexName(this IPlatformDatabaseObjectFactory objectFactory, IDatabaseServices databaseServices, string tableName, IEnumerable <IPlatformTableSourceColumnInfo> columns)
        {
            string baseName = PlatformDatabaseObjectConstants.IndexPrefix +
                              tableName + "_" + columns.Select(c => c.Name.Length + c.Name).StrCat("_");

            return(objectFactory.GetNewUniqueIdentifer(databaseServices, baseName));
        }
        /// <summary>
        /// Returns a name that can be used as a primary key identifier name.
        /// </summary>
        /// <param name="objectFactory">The introspection object factory</param>
        /// <param name="databaseServices">The database services</param>
        /// <param name="tableName">Name of the table for which we want to create a primary key</param>
        /// <returns>A name that can be used as a sql identifier name</returns>
        public static string GetNewPrimaryKeyName(this IPlatformDatabaseObjectFactory objectFactory,
                                                  IDatabaseServices databaseServices, string tableName)
        {
            string baseName = (IsSystemTable(tableName)
                ? PlatformDatabaseObjectConstants.PrimarySysConstPrefix
                : PlatformDatabaseObjectConstants.PrimaryConstPrefix) + tableName;

            return(objectFactory.GetNewUniqueIdentifer(databaseServices, baseName));
        }
        /// <summary>
        /// Returns a name that can be used as a foreign key identifier name.
        /// </summary>
        /// <param name="objectFactory">The introspection object factory</param>
        /// <param name="databaseServices">The database services</param>
        /// <param name="tableName">Name of the table for which we want to create a foreign key</param>
        /// <param name="referencedTableName">Name of the referenced table</param>
        /// <param name="columnName">Name of the column</param>
        /// <returns>A name that can be used as a sql identifier name</returns>
        public static string GetNewForeignKeyName(this IPlatformDatabaseObjectFactory objectFactory,
                                                  IDatabaseServices databaseServices, string tableName, string referencedTableName,
                                                  string columnName)
        {
            string baseName = PlatformDatabaseObjectConstants.ForeignConstPrefix +
                              tableName + "_" + referencedTableName + "_" + columnName;

            return(objectFactory.GetNewUniqueIdentifer(databaseServices, baseName));
        }
        /// <summary>
        /// Returns a name that can be used as an event trigger identifier name.
        /// </summary>
        /// <param name="objectFactory">The introspection object factory</param>
        /// <param name="databaseServices">The database services</param>
        /// <param name="tableName">Name of the table for which we want to create a trigger</param>
        /// <returns>A name that can be used as a sql identifier name</returns>
        public static string GetNewEventTriggerName(this IPlatformDatabaseObjectFactory objectFactory, IDatabaseServices databaseServices, string tableName)
        {
            string baseName = PlatformDatabaseObjectConstants.EventTriggerPrefix + "_" + tableName;

            return(objectFactory.GetNewUniqueIdentifer(databaseServices, baseName));
        }