parser

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

 

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

Ответ

lexR119 05.09.2011 13:37

################################################################################################################################
# $Id: mysql.p,v 1.24 2005/03/02 10:38:30 misha Exp $
################################################################################################################################


@CLASS
mysql

@USE
sql.p

@BASE
sql



###########################################################################
@auto[]
$server_name[mysql]
#end @auto[]



###########################################################################
@init[connect-string;params]
^BASE:init[$connect-string;$params]
#end @init[]



###########################################################################
###########################################################################
# РАБОТА С ДАТАМИ

###########################################################################
@today[]
$result[CURDATE()]
#end @today[]


###########################################################################
@now[]
$result[NOW()]
#end @now[]


###########################################################################
@year[source]
$result[YEAR($source)]
#end @year[]


###########################################################################
@month[source]
$result[MONTH($source)]
#end @month[]


###########################################################################
@day[source]
$result[DATE_FORMAT($source,'%d')]
#end @day[]


###########################################################################
@ymd[source]
$result[DATE_FORMAT($source,'%Y-%m-%d')]
#end @ymd[]


###########################################################################
@date_diff[t;dt_from;dt_to]
$result[^if(def $dt_to){TO_DAYS($dt_to)}{^now[]} - TO_DAYS($dt_from)]
#end @date_diff[]


###########################################################################
@date_sub[date;days]
$result[DATE_SUB(^if(def $date){$date}{^today[]},INTERVAL $days DAY)]
#end @date_sub[]


# функции, имеющие аналоги не во всех серверах
###########################################################################
#----- не работает, заменителя не знаю
@date_add[date;days]
$result[]
#end @date_add[]


###########################################################################
# нету у MSSQL
@date_format[source;format_string]
$result[DATE_FORMAT($source, '^if(def $format_string){$format_string}{%Y-%m-%d}')]
#end @date_format[]



###########################################################################
# РАБОТА С LAST_INSERT_ID()

###########################################################################
@last_insert_id[table]
$result(^int:sql{SELECT DISTINCT last_insert_id() FROM $table}[$.default{0}])
#end @last_insert_id[]


###########################################################################
@set_last_insert_id[table;field]
$result(^last_insert_id[$table])
^void:sql{UPDATE $table SET ^if(def $field){$field}{sort_order} = $result WHERE ${table}_id = $result}
#end @set_last_insert_id[]



###########################################################################
###########################################################################
# РАБОТА СО СТРОКАМИ

###########################################################################
@substring[source;pos;length]
$result[SUBSTRING($source,^if(def $pos){$pos}{1},^if(def $length){$length}{1})]
#end @substring[]


###########################################################################
@upper[field]
$result[UPPER($field)]
#end @upper[]


###########################################################################
@lower[field]
$result[LOWER($field)]
#end @lower[]


###########################################################################
@concat[params]
$result[CONCAT($params)]
#end @concat[]



###########################################################################
###########################################################################
# РАЗНОЕ

###########################################################################
@password[pass]
$result[PASSWORD($pass)]
#end @password[]


###########################################################################
@left_join[type;table;join_conditions;last]
^if(^type.lower[] eq "from"){
	$result[LEFT JOIN $table ON ($join_conditions)]
}{
	$result[1 = 1 ^if(!def $last){ AND}]
}
#end @left_join[]



###########################################################################
# перекрываем заглушку для того, чтобы для каждого запроса получать explain информацию
@_get_query_detail[type;query;sql_options][eres;cols]
^if(def $query && $type ne "void"){
	^try{
		$eres[^table::sql{explain $query}[^if($sql_options is "hash"){^if($sql_options.offset){$.offset($sql_options.offset)}^if($sql_options.limit){$.limit($sql_options.limit)}}]]
		$cols[^eres.columns[]]
		$result[EXPLAIN:^#0A^cols.menu{$cols.column}[^#09]^#0A^eres.menu{^cols.menu{$eres.[$cols.column]}[^#09]}[^#0A]]
	}{
		$result[]
		$exception.handled(1)
	}
}{
	$result[]
}
#end @_get_query_detail[]