parser

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

 

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

Удаление выборочных строк из таблицы

Никита Козин 25.06.2005 18:38

При загрузке модуля, я смотрю какие к нему прилагаются классы и записываю информацию о модулях и классах в табличку:
^rem{ *** Устанавливаем классы *** }
^module_info.classes.menu{
	^MAIN:pSQL.void{
		INSERT INTO
			engine_classes (
				class_name,
				module_id
			)
		VALUES (
			'$module_info.classes.name',
			^MAIN:pSQL.last_insert_id[engine_modules]
		)
	}
}
^dir_copy[$temp.dir/classes/;/classes/;$.is_recursive(1)]
При удалении надо проверять, используются ли классы удаляемого модуля другими модулями, и если нет, то удалить их. И здесь я запутался :(
@uninstallModule[module_id][classes]
$module_id(^module_id.int(0))
^if($module_id){
	^rem{ *** Удаляем информацию о модуле из базы данных *** }
	^MAIN:pSQL.table{
		DELETE FROM
			engine_modules
		WHERE
			module_id = $module_id
	}

	^rem{ *** Смотрим: какие классы использовал модуль... *** }
	$classes[^MAIN:pSQL.table{
		SELECT
			module_id,
			class_name
		FROM
			engine_classes
	}]
	$classes[
		^rem{ *** Хэш всех классов всех модулей *** }
		$.names[^classes.hash[class_name]]
		^rem{ *** Таблица классов удаляемого модуля *** }
		$.module[^classes.select($classes.module_id==$module_id)]
		^rem{ *** Пустой таблица. Сюда будем добавлять имя класса, подлежащего удалению *** }
		$.delete[^table::create{class_name}]
	]
	^classes.module.menu{
		^if(
			$classes.names.[$classes.module.class_name].count[] == 1
			&& $classes.names.[$classes.module.class_name].module_id == $module_id
		){
			^classes.delete.append{$classes.module.class_name}
		}
	}
	^classes.delete.menu{
		^file:delete[/classes/$classes.delete.class_name]
	}
	^MAIN:pSQL.void{
		DELETE FROM
			engine_classes
		WHERE
			class_name IN (^classes.delete.menu{$classes.delete.class_name}[,])
	}
}
# end @uninstallModule[]


  • Удаление выборочных строк из таблицы, Никита Козин [M] 25.06.2005 18:38