parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Мысли

Никита Козин 17.05.2005 12:45 / 17.05.2005 12:46

Почему бы не передавать классу объект SQL из примеров?
@init[params]
# нам ОБЯЗАТЕЛЬНО должны должны передать объект, через который будут делаться все sql-запросы
^if(def $params.csql){
	$csql[$params.csql]
}{
	^throw[shop;Initialization failure. ^$.csql option MUST be specified.]
}
# end @init[]

# непосредственно место, откуда происходит инициализация класса:
@USE
mysql.p
shop.p

@auto[]
$SQL.connect-string[mysql://user:password@server/table]
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]
^MAIN:pSQL.server{
	$shop[
		^shop::init[
			$.csql[$MAIN:pSQL]
		]
	]
}
# end @auto[]
Теперь подключение будет происходить так:
@install[]
^csql.void{
	CREATE TABLE IF NOT EXISTS ...
}
# end @install[]
Дальше, зачем проверять чему равен action:
(можно сделать это при вызове метода)
^if($action eq "add"){
^if(def $cat_id){
^if(def $quantity){
^connect[$self.connect]{
^void:sql{INSERT INTO basket (cat_id, quantity, user_id) VALUES ('^taint[sql][$cat_id]', '^taint[sql][$quantity]', '^taint[sql][$self.user_id]')}
^self.event.append{is_bas_add}
}
}
}
}

############################

@bas_add[cat_id;quantity]
^if((def $cat_id && ^cat_id.int(0) != 0) && (def $quantity && ^quantity.int(0) != 0)){
	^csql.void{
		INSERT INTO
			basket (
				cat_id,
				quantity,
				user_id
			)
		VALUES (
			$cat_id,
			$quantity,
			$self.user_id
		)
		^rem{ *** Не нужно делать никаких taint-ов, парсер их сам сделает при работе с базой *** }
		^rem{ *** К тому же если мы вставляем только цифры - что тэйнтить? *** }
	}
}
# end @bas_add[]

Ну и остальные методы по анологии вроде бы. Это то, что бросилось. Да, кстати, зачем объявлять перепенные как $self.[переменная]?.. Пусть они и остаются внутри класса.