- 1
- 2
- 3
- 4
- 5
CREATE TRIGGER TR_Table1 ON Table1
INSTEAD OF INSERT
AS
INSERT INTO Table1
SELECT * FROM INSERTED
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−170
CREATE TRIGGER TR_Table1 ON Table1
INSTEAD OF INSERT
AS
INSERT INTO Table1
SELECT * FROM INSERTED
Диалект MS SQL
INSTEAD OF INSERT - триггер, отменяющий вставку и передающий список значений, указанных в запросе в псевдотаблице INSERTED.
т.е. автор вместо того чтобы позволить северу вставлять строк решил каждый раз вставлять их лично.
−89
# Да, да, захардкоженные id!
# .where(id: [id_arrays]) ? Не, не слышал
@cities = [52, 21, 9, 18, 196, 27, 106, 4, 40, 71].collect { |c| City.find(c) }
# Это все в одном экшене, ага.
session[:latitude] = params[:my_latitude]
session[:longitude] = params[:my_longitude]
session[:my_address] = params[:my_address]
session[:fuel] = params[:fuel][:fuel_id]
session[:range] = params[:station][:range]
# А потом кто-нибудь развернет базу из бэкапа без сохранения первичных ключей и все перестанет работать.
@fuels = Fuel.where(:id=>[1, 2, 3, 5])
# Типичный экшен
session[:view_sub_page] = action_name
id = params[:station_chain].split("-")
s_id = id[id.size - 2]
station = Station.where(:id=>s_id)
@fuels_level = AppUtils.calculate_price(station)
@prices = station.last.prices.order("created_at").group_by { |item| item.fuel_id }
@fuel_id = id[id.size - 1].to_i
@station_lists = Station.get_station_detail_map(station, @fuels_level, @fuel_id, @prices)
@station = station.last
@station_logo = ''
@station_logo_chain = ManageStationChain.where(:brand_id=>@station.brand_id).last
@station_logo = PromoLogo.find_by_station_id(@station.id)
@end = @station.address
@fuels = Fuel.where(:id=>[1, 2, 3, 5])
@sub_station = ""
@cities = Station.get_static_cities()
# Какие еще Rails, у меня свой лисопед
def City.find_by_name(name)
city = City.where("name = ?", name).first
if city.nil?
city = City.new
city.name = name
city.save
end
return city
end
# Именно так, в одну строчку. station.open_time и close_time - типа :time в базе
if !station.open_time.nil? and !station.close_time.nil? and (Time.parse(station.open_time.to_s)...Time.parse(station.close_time.to_s)).cover?(Time.now.utc.change(year: 2000, month: 1, day: 1, hour: Time.now.hour, min: Time.now.min, second: 0)) == false
return "PRICE_LEVEL_CLOSE"
end
# Компьютер купил, программировать не купил
# В таблице Points - тысячи записей
def get_points
points = Points.all
render json: {:success => true, :data => {:points => points.as_json(:only => [:action, :points, :points_new])}} and return
end
# И под занавес - код логина
# Гемы? Devise? OAuth? А чой энта?
def login
register = false
url = "https://graph.facebook.com/me/?access_token="+params[:facebook_token]
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.path + "?" + uri.query)
response = http.request(request)
if response.code == "200"
facebook_response = JSON.parse(response.body)
user = User.where("facebook_id = ?", facebook_response["id"]).first
if !user
user = User.new
user.facebook_id = facebook_response["id"]
user.nick = facebook_response["username"]
user.email = facebook_response["email"]
register = true
end
user.email = facebook_response["email"]
user.generate_token
user.save
if register == true
history = History.new
history.user = user
points = Points.where(:action => "REGISTER").first
history.points_action = points
history.points = points.points
user.points+=points.points
user.save
history.save
end
logger.debug("Calculating point");
points = Points.where('action != ?', 'FACEBOOK_INVITES')
logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
logger.debug("Testing for points");
logger.debug(points.as_json(:only => [:action, :points]))
logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
if user.disabled == true
render json: {:success => false, :error => {:message => "Invalid facebook token", :error_code => "INVALID_TOKEN"}}, status: :unauthorized and return
else
render json: {:success => true, :data => {:auth_token => user.auth_token, :points => points.as_json(:only => [:action, :points])}} and return#
...
Почему никогда нельзя нанимать индусских программистов. Выдержки из избранного.
+56
` enum SearchFlag
{
IgnoreCase = 0x00000001, ///< Case differences are ignored
- WholeWorlds = 0x00000002 ///< Only whole words are matched
+ WholeWords = 0x00000002 ///< Only whole words are matched
};
очепятка + копи-паста = world domination.
http://lists.freedesktop.org/archives/poppler/2015-January/011251.html
http://cgit.freedesktop.org/poppler/poppler/commit/?id=78abf540057181b708c546aee421f81a1dd5 8331
+156
if ($var==0 && $var3==0 && $var4==0) {
$qr_result = mysql_query("SELECT type_id, image_plan, section_type, house_number, section_number_real, rooms, prod FROM `psp_gen_plan_type` WHERE prod=0 ORDER BY `house_number` ASC" . $db_table_to_show)
or die(mysql_error()); }
elseif ($var!=0 && $var3!=0 && $var4!=0){
$qr_result = mysql_query("SELECT type_id, image_plan, section_type, house_number, section_number_real, rooms, prod FROM `psp_gen_plan_type` WHERE house_number='$var' AND prod=0 AND section_type='$var3' AND rooms='$var4'" . $db_table_to_show)
or die(mysql_error()); }
elseif ($var!=0 && $var3==0 && $var4==0){
$qr_result = mysql_query("SELECT type_id, image_plan, section_type, house_number, section_number_real, rooms, prod FROM `psp_gen_plan_type` WHERE house_number='$var' AND prod=0 ORDER BY `section_number_real` ASC" . $db_table_to_show)
or die(mysql_error()); }
elseif ($var==0 && $var3!=0 && $var4==0){
$qr_result = mysql_query("SELECT type_id, image_plan, section_type, house_number, section_number_real, rooms, prod FROM `psp_gen_plan_type` WHERE section_type='$var3' AND prod=0 ORDER BY `house_number` ASC" . $db_table_to_show)
or die(mysql_error()); }
elseif ($var==0 && $var3==0 && $var4!=0){
$qr_result = mysql_query("SELECT type_id, image_plan, section_type, house_number, section_number_real, rooms, prod FROM `psp_gen_plan_type` where rooms='$var4' AND prod=0 ORDER BY `house_number` ASC" . $db_table_to_show)
or die(mysql_error()); }
elseif ($var!=0 && $var3==0 && $var4!=0){
$qr_result = mysql_query("SELECT type_id, image_plan, section_type, house_number, section_number_real, rooms, prod FROM `psp_gen_plan_type` where house_number='$var' AND prod=0 AND rooms='$var4' ORDER BY `house_number` ASC" . $db_table_to_show)
or die(mysql_error()); }
elseif ($var!=0 && $var3!=0 && $var4==0){
$qr_result = mysql_query("SELECT type_id, image_plan, section_type, house_number, section_number_real, rooms, prod FROM `psp_gen_plan_type` where house_number='$var' AND prod=0 AND section_type='$var3' ORDER BY `section_number_real` ASC " . $db_table_to_show)
or die(mysql_error()); }
elseif ($var==0 && $var3!=0 && $var4!=0){
$qr_result = mysql_query("SELECT type_id, image_plan, section_type, house_number, section_number_real, rooms, prod FROM `psp_gen_plan_type` where rooms='$var4' AND prod=0 AND section_type='$var3' ORDER BY `house_number` ASC " . $db_table_to_show)
or die(mysql_error()); }
Кинули сайт на доработку. Вот с таким вот фильтром.
+156
public function fillRow($row, $table)
{
static $counter;
global $app_list_strings, $locale;
$counter++;
$row['counter'] = $counter;
$row['status_abc_current'] = $row['status_abc_current'];
$row['status_abc_1_quarter_ago'] = $row['status_abc_1_quarter_ago'];
$row['status_abc_2_quarter_ago'] = $row['status_abc_2_quarter_ago'];
$row['status_abc_3_quarter_ago'] = $row['status_abc_3_quarter_ago'];
$row['status_abc_4_quarter_ago'] = $row['status_abc_4_quarter_ago'];
return $row;
}
что-то тут не так
+133
if (dbg)
printf("2\n");
// This is debug mode
+157
function run()
{
var test = [60, 1, 5, 70, 8];
var biggest = 100;
var biggest_index = 0;
for (var i = 0; i < test.length; i++)
{
if (test[i] < test[i + 1])
{
biggest = test[i + 1];
test[biggest - [i + 1]] = [biggest];
}
}
test[test.length] = biggest;
}
run();
таск был найти наибольшего эллемента масива [60, 1, 5, 70, 8]; во что получилось у коллеги новобранца. это был его 20-ты опыт ;)
+133
//......................................
void DlPortWritePortUshort(WORD addr, WORD data) {
DWORD br;
(&addr)[1]=data;
DeviceIoControl(hdriver,IOCTL_WRITE_PORT_USHORT,&addr,4,NULL,0,&br,NULL);
}
DWORD DlPortReadPortUlong(WORD addr) {
DWORD br;
DeviceIoControl(hdriver,IOCTL_READ_PORT_ULONG,&addr,2,&addr,4,&br,NULL);
return *(DWORD*)&addr;
}
void DlPortWritePortUlong(WORD addr, DWORD data) {
DWORD br;
DeviceIoControl(hdriver,IOCTL_WRITE_PORT_ULONG,&addr,8,NULL,0,&br,NULL);
}
//......................................
Кусок очередного форка dll-ки для работы с очередным, мать его, форком драйвера inpout32.sys.
Попался в поисках исправленного драйвера и dll-обёртки для него.
+95
public static class ColorExtension
{
public static bool IsDarkColor(this Color color)
{
return (color.R & 255) + (color.G & 255) + (color.B & 255) < 3*256/2;
}
}
x & 255 = ?, где x типа byte
+74
private static File getTmpOutputFile(VirtualFile file) {
String origPath = file.getRealFile().getAbsolutePath();
File tmp = new File(origPath + ".tmp");
// If the temp file already exists
if (tmp.exists()) {
long tmpLastModified = tmp.lastModified();
long now = System.currentTimeMillis();
// If the temp file is older than the destination file, or if it is
// older than the allowed compression time, it must be a remnant of
// a previous server crash so we can overwrite it
if (tmpLastModified < file.lastModified()) {
return tmp;
}
if (now - tmpLastModified > PluginConfig.maxCompressionTimeMillis) {
return tmp;
}
// Otherwise it must be currently being written by another thread,
// so wait for it to finish
while (tmp.exists()) {
if (System.currentTimeMillis() - now > PluginConfig.maxCompressionTimeMillis) {
throw new PressException("Timeout waiting for compressed file to be generated");
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
// Return null to indicate that the file was already generated by
// another thread
return null;
}
return tmp;
}
Самый вредный говнокод, который я встречал за последний год.
При определённых условиях может так случиться, что он ждёт (до 60 секунд!), пока предыдущий временный файл не исчезнет. Он не пытается его удалить, не пытается создать новый файл, ничего не логирует - он просто ждёт, пока файл сам исчезнет.
И у меня как раз так и случилось - из-за совпадения разных событий файл не удалялся, метод ждал 60 секунд, но за это время валились совсем другие вещи по таймауту, и ушло много времени на то, чтобы понять, где же настоящая проблема.
И весь этот геморрой можно было бы благополучно заменить всего-навсего одной сточкой:
return File.createTempFile(origPath, "tmp");
Исходник - плагин play-press:
https://github.com/dirkmc/press/blob/master/app/press/io/OnDiskCompressedFile.java