You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
krecipes/krecipes/src/backends/qsqlrecipedb.h

229 lines
8.9 KiB

/***************************************************************************
* Copyright (C) 2004 by *
* Unai Garro (ugarro@users.sourceforge.net) *
* Cyril Bosselut (bosselut@b1project.com) *
* Jason Kivlighn (jkivlighn@gmail.com) *
* *
* Copyright (C) 2006 Jason Kivlighn (jkivlighn@gmail.com) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#ifndef TQSQLRECIPEDB_H
#define TQSQLRECIPEDB_H
#include "backends/recipedb.h"
#include <ntqglobal.h>
#include <ntqobject.h>
#include <ntqsqldatabase.h>
#include <ntqimage.h>
#include <ntqfileinfo.h>
#include <ntqregexp.h>
#include <ntqstring.h>
#include "datablocks/recipe.h"
#include "datablocks/elementlist.h"
#include "datablocks/ingredientpropertylist.h"
#include "datablocks/unitratiolist.h"
/**
@author Unai Garro, Jason Kivlighn
*/
class TQSqlRecipeDB : public RecipeDB
{
TQ_OBJECT
protected:
virtual TQString qsqlDriverPlugin() const { return TQString::null; }
virtual TQSqlDriver *qsqlDriver() const { return 0; }
virtual void createDB( void ) = 0;
virtual void portOldDatabases( float version );
virtual void storePhoto( int recipeID, const TQByteArray &data );
virtual void loadPhoto( int recipeID, TQPixmap &photo );
void loadRecipeMetadata( Recipe *recipe );
void search( RecipeList *list, int items, const RecipeSearchParameters & );
/** Return the next id for the given table and column.
* If the database supports getting this afterwards,
* leave the default implementation which returns -1.
*
* Note: Only call when an insert is actually going to take place.
* This function will increment the sequence counter.
*/
virtual int getNextInsertID( const TQString & /*table*/, const TQString & /*column*/ )
{
return -1;
}
TQSqlDatabase *database;
TQSqlQuery m_query;
TQString DBuser;
TQString DBpass;
TQString DBhost;
int DBport;
public:
TQSqlRecipeDB( const TQString &host, const TQString &user = TQString::null, const TQString &pass = TQString::null, const TQString &DBName = DEFAULT_DB_NAME, int port = 0 );
~TQSqlRecipeDB( void );
void connect( bool create_db, bool create_tables );
void addIngredientWeight( const Weight & );
void addProperty( const TQString &name, const TQString &units );
void addPropertyToIngredient( int ingredientID, int propertyID, double amount, int perUnitsID );
void addUnitToIngredient( int ingredientID, int unitID );
void categorizeRecipe( int recipeID, const ElementList &categoryList );
void changePropertyAmountToIngredient( int ingredientID, int propertyID, double amount, int per_units );
void createNewAuthor( const TQString &authorName );
void createNewCategory( const TQString &categoryName, int parent_id = -1 );
void createNewIngGroup( const TQString &name );
void createNewIngredient( const TQString &ingredientName );
void createNewPrepMethod( const TQString &prepMethodName );
void createNewRating( const TQString &name );
void createNewUnit( const Unit &unit );
void createNewYieldType( const TQString &type );
void emptyData( void );
void empty( void );
int findExistingAuthorByName( const TQString& name );
int findExistingCategoryByName( const TQString& name );
int findExistingIngredientGroupByName( const TQString& name );
int findExistingIngredientByName( const TQString& name );
int findExistingPrepByName( const TQString& name );
int findExistingRecipeByName( const TQString& name );
int findExistingRatingByName( const TQString& name );
int findExistingUnitByName( const TQString& name );
int findExistingPropertyByName( const TQString& name );
int findExistingYieldTypeByName( const TQString& name );
void findIngredientUnitDependancies( int ingredientID, int unitID, ElementList *recipes, ElementList *ingredientInfo );
void findIngredientDependancies( int ingredientID, ElementList *recipes );
void findPrepMethodDependancies( int prepMethodID, ElementList *recipes );
void findUnitDependancies( int unitID, ElementList *properties, ElementList *recipes, ElementList *weights );
void findUseOfIngGroupInRecipes( ElementList *results, int groupID );
void findUseOfCategoryInRecipes( ElementList *results, int catID );
void findUseOfAuthorInRecipes( ElementList *results, int authorID );
TQString getUniqueRecipeTitle( const TQString &recipe_title );
bool ingredientContainsProperty( int ingredientID, int propertyID, int perUnitsID );
bool ingredientContainsUnit( int ingredientID, int unitID );
void loadAuthors( ElementList *list, int limit = -1, int offset = 0 );
void loadCategories( CategoryTree *list, int limit = -1, int offset = 0, int parent_id = -1, bool recurse = true );
void loadCategories( ElementList *list, int limit = -1, int offset = 0 );
void loadIngredientGroups( ElementList *list );
void loadIngredients( ElementList *list, int limit = -1, int offset = 0 );
void loadPossibleUnits( int ingredientID, UnitList *list );
void loadPrepMethods( ElementList *list, int limit = -1, int offset = 0 );
void loadProperties( IngredientPropertyList *list, int ingredientID = -2 ); // Loads the list of possible properties by default, all the ingredient properties with -1, and the ingredients of given property if id>=0
void loadRatingCriterion( ElementList *list, int limit = -1, int offset = 0 );
void loadRecipes( RecipeList *, int items = All, TQValueList<int> ids = TQValueList<int>() );
void loadRecipeList( ElementList *list, int categoryID = -1, bool recursive = false );
void loadUncategorizedRecipes( ElementList *list );
void loadUnits( UnitList *list, Unit::Type = Unit::All, int limit = -1, int offset = 0 );
void loadUnitRatios( UnitRatioList *ratioList, Unit::Type );
void loadYieldTypes( ElementList *list, int limit, int offset );
void mergeAuthors( int id1, int id2 );
void mergeCategories( int id1, int id2 );
void mergeIngredientGroups( int id1, int id2 );
void mergeIngredients( int id1, int id2 );
void mergeUnits( int id1, int id2 );
void mergePrepMethods( int id1, int id2 );
void mergeProperties( int id1, int id2 );
void modIngredientGroup( int ingredientID, const TQString &newLabel );
/**
* set newLabel for ingredientID
*/
void modIngredient( int ingredientID, const TQString &newLabel );
/**
* set newLabel for unitID
*/
void modUnit( const Unit &unit );
/**
* set newLabel for categoryID
*/
void modCategory( int categoryID, const TQString &newLabel );
void modCategory( int categoryID, int new_parent_id );
/**
* set newLabel for authorID
*/
void modAuthor( int authorID, const TQString &newLabel );
void modPrepMethod( int prepMethodID, const TQString &newLabel );
void modProperty( int propertyID, const TQString &newLabel );
TQString recipeTitle( int recipeID );
void removeAuthor( int categoryID );
void removeCategory( int categoryID );
void removeIngredientGroup( int groupID );
void removeIngredient( int ingredientID );
void removeIngredientWeight( int id );
void removePrepMethod( int prepMethodID );
void removeProperty( int propertyID );
void removePropertyFromIngredient( int ingredientID, int propertyID, int perUnitID );
void removeRecipe( int id );
void removeRecipeFromCategory( int ingredientID, int categoryID );
void removeUnit( int unitID );
void removeUnitFromIngredient( int ingredientID, int unitID );
void removeUnitRatio( int unitID1, int unitID2 );
void saveRecipe( Recipe *recipe );
void saveUnitRatio( const UnitRatio *ratio );
double unitRatio( int unitID1, int unitID2 );
double ingredientWeight( const Ingredient &ing, bool *wasApproximated = 0 );
WeightList ingredientWeightUnits( int ingID );
TQString escapeAndEncode( const TQString &s ) const;
TQString unescapeAndDecode( const TQCString &s ) const;
TQString categoryName( int ID );
TQString prepMethodName( int ID );
TQString ingredientName( int ID );
IngredientProperty propertyName( int ID );
Unit unitName( int ID );
int getCount( const TQString &table_name );
int categoryTopLevelCount();
bool checkIntegrity( void );
void splitCommands( TQString& s, TQStringList& sl );
float databaseVersion( void );
protected:
void execSQL( const TQString &command );
private:
void loadElementList( ElementList *elList, TQSqlQuery *query );
void loadPropertyElementList( ElementList *elList, TQSqlQuery *query );
TQString getNextInsertIDStr( const TQString &table, const TQString &column );
TQString DBname;
const TQString connectionName;
TQString m_command;
static int m_refCount;
};
#endif