# -*- coding: latin-1 -*-
from string import *
from DateTime import DateTime

const_dateTime = DateTime()

def sqlFilter(value):
	if value is None or upper(str(value)) == 'NULL':
		return 'NULL'
	if value == "now()":
		return value
	return "'%s'" % replace(replace(strip(str(value)),"\\'","'"),"'","''")

def unSqlFilter(value):
	if value == None or value == '' or value == 'NULL':
		return None
	if value[0] == "'":
		return replace(value[1:-1], "''", "'")
	return value

def sql_quote(v):
	quote_dict = {"\'": "''", "\\": "\\\\"}
	for dkey in quote_dict.keys():
		if find(v, dkey) >= 0:
			v=join(split(v,dkey),quote_dict[dkey])
	return v

def names_values_for_update(dict):
	"""
	Retourne la chaine prop1='val1',...,propn='valn'
	(pour construire l'update)
	"""
	res = ''
	for key, value in dict.items():
		if type(value) == type(const_dateTime):
			value = "%s" % value
			if len(value)!=10:
				value = value[:-6] # vire GMT+2 (pb posgresql)					
		if value is not None:
			res += "%s=%s," % (key, sqlFilter(value))
	return res[:-1]

def names_for_insert(dict):
	"""
	Retourne la chaine (prop1,...,propn)
	(pour construire l'insert)
	"""
	return "(%s)" % join(dict.keys(), ',')

def values_for_insert(dict):
	"""
	Retourne la chaine ('value1',...,valuen)
	(pour construire l'insert)
	"""
	res = "("
	for value in dict.values():
		if type(value) == type(const_dateTime):
			value = "%s" % value
			if len(value)!=10:
				value = value[:-6] # vire GMT+2 (pb posgresql)
		#if value is not None: si vous voulez le remettre, modifiez aussi names_for_insert
		res += "%s," % sqlFilter(value)
	return res[:-1] + ")"

def sql_insert(table, dict):
	"""
	construit la requete d'insert
	"""
	return "insert into %s %s values %s;" % (table, names_for_insert(dict), values_for_insert(dict))

def sql_update(table, dict):
	"""
	construit la requete d'update
	"""
	return "update %s set %s where uid=%s;" % (table, names_values_for_update(dict), dict['uid'])

	

