Fórumok
A legutóbbi ccc update után az sgl-es program az első select-nél elszállt. Az oknyomozás során a postgresql driver rowset.prg-ben a következő eltérést találtam a
korábbi verzióhoz képest (122. sor):
if( filterclause!=NIL )
stmt+=" "+sql2.postgres.sqlbind(filterclause,bindarray)
end
Az idézőjelek közül kimaradhatott a where kulcsszó, beírtam újrafordítás után minden OK.
Hozzászólások
Tévedsz. Az idézőjek között csak egy szóköz van, hogy a parancs elemei el legyenek választva. A where a filterclause része (első szava). Talán a tds-t szúrtad el. Itt egy példa, hogyan kell selectet definiálni:
Az ide beírt "where" kerül át a filterclause-ba.
--
CCC3
A tds-ek teljesen renben vannak ugyanis egy korábbi verzióval tökéletesen működnek.
Beidézném neked a comfirm.hu-ról letölthető verzió idevonatkozó kódrészletét:
static function rowset.__select__(this,whereclause,orderbyclause,bindarray,wait,crsflg)
local stmt,status,err
stmt:="select "+this:__table__:__selectlist__
stmt+=" from "+this:__table__:__fromclause__
if( whereclause!=NIL )
stmt+=" where "+sql2.postgres.sqlbind(whereclause,bindarray)
end
if( NIL!=orderbyclause )
stmt+=" order by "+orderbyclause
end
Biztos hogy tévedek?
Úgy látom, összekevered a változatokat.
Az első postodban levő kódrészletet megtaláltam a legfrissebb (svn-ből letölthető) változatban. Ellenőriztem: benne van a "where". Ha az általad javasolt helyre is be volna írva a "where", akkor már duplán volna.
A második postodban levő kódrészlet viszont a letölthető zip-ből van, ami sokkal régebbi. A két változat közötti eltérésre most nehezen tudnék visszaemlékezni. Az újat kell használni és kész (tehát az svn-t).
Nem tudom, nem CCC2-t használsz-e. Ha azt használsz, azt is frissítsd az svn-ből. Sokat dolgoztam azért, hogy a CCC3-ban fejlesztett egyes könyvtárak (mint az SQL2 interfész is) leforduljanak CCC2 alatt (UTF8/unicode helyett Latin-1-gyel). Most az a helyzet, hogy az SQL2 könyvtár forrása CCC2-ben és CCC3-ban megegyezik. A továbbiakban már csak ezt szeretném karban tartani.
--
CCC3
Természetesen már ccc3-at használok és svn-ből frissítek.
A következőt próbáltam ma: leszedtem svn-el a teljes ccc3-at (187-es rev.) egy új
könyvtárba (tehát nem update-eltem)
A ..../driver-postgres/rowset.prg-ben (15212 bájt) nincsen where string!
Remélem nem kekeckedésnek veszed, de a mellékelt ábra szerint itt valami nem OK.
Igen, és az a helyes. A "where" string a tds-be írt select-ből másolódik át, ahogy először is írtam.
--
CCC3
Talán segít, ha megnézed az util/tdsutil/tds2dom.prg 320. sora táján a kódba írt commenteket, különösen ezt:
A másik, hogy vannak projektek, ahol CCC2-t _kell_ használni. A CCC2 és a CCC3 között a karakterkódolás a legnagyobb különbség. Ha olyan a szituáció, hogy nem lehet áttérni UTF-8/unicode kódolásra (pl. a főnök nem engedi), akkor maradni kell CCC2-n. A CCC2-ben ugyanúgy benne vannak a korszerűsítések, mint a CCC3-ban. Egyszer írta itt valaki, hogy ilyen helyzetben van.
--
CCC3
Esetleg elküldhetnéd a tds fájlodat és az SQL utasítást, ami generálódik belőle. Végül is hibák mindig lehetnek.
--
CCC3
A tds-t és az sql kimenetet elküldtem a comfirm-es címedre, mert ha a hozzászólásba
tettem a HUP szerver kiabált és nem engedte beküldeni...
Nálam ott van a "where".
Ellenőrizd, hogy minden utility újra legyen fordítva, különösen a tds2prg. Az SQL-es dolgok nem fordulnak automatikusan, hanem be kell menni a $CCCDIR/tools/sql2-be, és elindítani az mkall.b-t. Utána futtasd le ezt:
A generált kód (aal.prg) 76. és 78. sorában ott kell legyen a "where", nekem ott van. A te eseted olyan, mintha a régi változatú tds2prg-t használnád az új változatú SQL kódgenerátorral (lásd még az "emlékeztetőt", amit korábban írtam).
Nem tudom ismered-e a jeed programot. Ha nem, próbáld ki: jeed.exe aal.tds. (Ehhez meg a Jáva terminált kell külön lefordítani: $CCCDIR/jt-ben mkall.b)
Ha már itt tartunk, így célszerű CCC-t fordítani:
1) $CCCDIR-ben (clean-all.b) install.b
2) $CCCDIR/jt-ben (clean.b) mkall.b
3) $CCCDIR/tools/sql2-ben (clean.b) mkall.b
4) $CCCDIR/gtk-ban (cleanall.b) mkall.b
A 2-3-4 lépés nem automatikus, mert nem kell mindig mindenkinek, és plusz dolgokat kell hozzá installálni.
Ja. Ha már itt tartunk. Nemrég telepítettem egy új Gutsyt, és volt alkalmam kifigyelni, hogy miket kell installálni, hogy forduljon a CCC. Itt az eredmény.
--
CCC3
A problémát a következő okozta: a frissített CCC letöltése és újrafordítása után, az alkalmazásom tds könyvtárában csak a lib és obj fájlokat töröltem le és fordítottam újra az mklib scripttel (ami az mkentitylib.exe-t indítja)
A régi, tds-ből generált prg-ket nem töröltem le, így a lib ezekből fordítódott.
A prg-k törlése és az mklib újrafuttatása után minden rendbe jött.
Tanulság: ha módosul az sql2 a ccc-ben akkor az alkalmazásunk tábladefiníciókat tartalmazó könyvtárában töröljük a prg-ket is (ezt akár az mklib szkriptbe is bele lehetne tenni)
Köszönöm mrev-nek a segítséget probléma megoldásában.
A mkentitylib alapesetben akkor csinál a tds-ből prg-t, ha az előbbi frissebb vagy az utóbbi nem létezik. Ha viszont be van állítva a MKENTITYLIB_FORCE környezet bármilyen nemüres értékre, akkor a fájlidőktől függetlenül minden prg-t újragyárt. Ezt kellett volna használni, nem emlékeztem rá.
--
CCC3
mivel a rejtély tisztázódott úgy gondoltam módosítom a post címét (Postgresql bug?) nehogy már azt sugallja hogy bugos a ccc :)