From: Volkan YAZICI (yazicivo@ttnet.net.tr)
Date: Thu 24 Mar 2005 - 09:30:03 EET
Merhaba,
Bugün PQgetvalue() fonksiyonunu inceliyordum ve sanırım ufak (!)
bir duvar ile karşılaştım.
Önerme 1:
Fiziksel depolama alanınız yettiği sürece, istediğiniz kadar
satır saklayabilirsiniz bir PostgreSQL tablosunda. Yani
teorik olarak sınırsız.
Önerme 2:
src/interfaces/libpq/fe-exec.c dosyasında tanımlanan PQgetvalue
fonksiyonuna bakıyoruz:
char *
PQgetvalue(const PGresult *res, int tup_num, int field_num)
{
if (!check_tuple_field_number(res, tup_num, field_num))
return NULL;
return res->tuples[tup_num][field_num].value;
}
Görüldüğü üzere, tup_num (satır indisi) bir integer olarak tanımlanmış.
Ve istediğimiz satırı "res->tuples[tup_num][field_num].value;"
yordamı yardımı ile çağırıyoruz.
Şimdi bu bir kenarda dursun: satır numarası bir integer olarak
tanımlı.
Önerme 3:
Sistemde limits.h dosyasına bakıyoruz:
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
Bu da bir kenarda dursun: Sistem kullanılabilecek en büyük integer
deÄŸeri: 2147483647
libpq çıkmazı: Eğer ben bir tablodaki 2147483647+1 inci satırı öğrenmeye
çalışırsam halim yaman.
Ufak bir nokta daha var. tuples'in yüklü bir struct olduğu göz önüne
alınırsa, tuples[INT_MAX][INT_MAX] büyüklüğünde bir çağrı ne derece
çalşır? (Bkz. Basit bir "short buf[INT_MAX]" oluşturma örneği.)
Aslında bu resmin sadece küçük bir parçası. Şöyle ki; piyasadaki
API'lerin %99'unun libpq'yu kendilerine baz aldıkları düşünülecek
olursa, onların hepsinde de bu (eğer düşüncem doğruysa) sınırlama
mevcut.
Sanırım sorum şimdilik bu kadar.
Yorum, öneri ve en önemlisi can simitlerinizi bekliyorum.
P.S. Lütfen ben bir noktayı gözden kaçırmış olayım. API kullanacak
insanların dünyası sınırlanmasın. :P
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama