Обсуждение: gin--a rule for function parameter
version: PG8.2.2 MY Question: Why must "take the same number of parameters" ? " We can check that all the referenced instances of the same support routine number take the same number of parameters" ? 1 there is no results by running regress test as follow: plsql/src/test/regress/sql/opr_sanity.sql ...... -- Unfortunately, we can't check the amproc link very well because the -- signature of the function may be different for different support routines -- or different base data types. -- We can check that all the referenced instances of the same support -- routine number take the same number of parameters, but that's about it -- for a general check... SELECT p1.amopclaid, p1.amprocnum,p2.oid, p2.proname,p3.opcname,p4.amopclaid, p4.amprocnum,p5.oid, p5.proname,p6.opcname FROM sys_amproc AS p1, sys_proc AS p2, sys_opclass AS p3, sys_amproc AS p4, sys_proc AS p5, sys_opclass AS p6 WHERE p1.amopclaid = p3.oid AND p4.amopclaid = p6.oid AND p3.opcamid = p6.opcamid AND p1.amprocnum = p4.amprocnum AND p1.amproc = p2.oid AND p4.amproc = p5.oid AND (p2.proretset OR p5.proretset OR p2.pronargs != p5.pronargs); But, contrib\tsearch2\tsearch.sql.in: ... CREATE OPERATOR CLASS gin_tsvector_ops DEFAULT FOR TYPE tsvector USING gin AS OPERATOR 1 @@ (tsvector, tsquery), OPERATOR 2 @@@ (tsvector, tsquery) RECHECK, FUNCTION 1 bttextcmp(text, text), FUNCTION 2 gin_extract_tsvector(tsvector,internal), FUNCTION 3 gin_extract_tsquery(tsquery,internal,internal), FUNCTION 4 gin_ts_consistent(internal,internal,tsquery), STORAGE text; When I use tsearch2, I found that gin_extract_tsquery() has 3 parameters, it break the rule "take the same number of parameters". So, who can tell me whether the rule is right? Grateful, Fly.Li for example, "ginarrayextract" function has two parameters ----------------------amopclaid | amprocnum | oid | proname | opcname | amopclaid | amprocnum | oid | proname | opcname -----------+-----------+------+---------------------+------------------+-----------+-----------+------+---------------------+------------------ 2771 | 3 | 2743 | ginarrayextract | _oidvector_ops
"Fly.Li" <fly2nn@126.com> writes: > version: PG8.2.2 > MY Question: > Why must "take the same number of parameters" ? Because the GIN code will call it with a particular number of arguments. > When I use tsearch2, I found that gin_extract_tsquery() has 3 parameters, it > break the rule "take the same number of parameters". 3 is the correct number of parameters for an extractQuery function (before 8.4 anyway), so I'm not clear what you are complaining about. regards, tom lane
1 ginarrayextract() has 2 parameters 2 gin_extract_tsquery() has 3 parameters 3 run sql(from plsql/src/test/regress/sql/opr_sanity.sql), it expect no results: ------------- SELECT p1.amopclaid, p1.amprocnum,p2.oid, p2.proname,p3.opcname,p4.amopclaid, p4.amprocnum,p5.oid, p5.proname,p6.opcname FROM pg_amproc AS p1, pg_proc AS p2, pg_opclass AS p3, pg_amproc AS p4, pg_proc AS p5, pg_opclass AS p6 WHERE p1.amopclaid = p3.oid AND p4.amopclaid = p6.oid AND p3.opcamid = p6.opcamid AND p1.amprocnum = p4.amprocnum AND p1.amproc = p2.oid AND p4.amproc = p5.oid AND (p2.proretset OR p5.proretset OR p2.pronargs != p5.pronargs); -------------- We can get results as follow:amopclaid | amprocnum | oid | proname | opcname | amopclaid | amprocnum | oid | proname | opcname -----------+-----------+------+---------------------+------------------+-----------+-----------+------+---------------------+------------------ 2771 | 3 | 2743 | ginarrayextract | _oidvector_ops | 3659 | 3 | 3657 | gin_extract_tsquery | tsvector_ops 2759 | 3 | 2743 | ginarrayextract | _cidr_ops | 3659 | 3 | 3657 | gin_extract_tsquery | tsvector_ops 2768 | 3 | 2743 | ginarrayextract | _name_ops | 3659 | 3 | 3657 | gin_extract_tsquery | tsvector_ops ...... 4 But, reading "plsql/src/test/regress/sql/opr_sanity.sql", there is a sentence said: " We can check that all the referenced instances of the same support routine number take the same number of parameters" ? 5 So, ginarrayextract() and gin_extract_tsquery() should take the same number of parameters? Or, " We can check that all the referenced instances of the same support routine number take the same number of parameters" is not a right? 6 Actually, pgsql allow all the referenced instances of the same support routine number do not take the same number of parameters. Thanks. Fly.Li "Tom Lane" <tgl@sss.pgh.pa.us> д���ʼ�����:<10550.1246457758@sss.pgh.pa.us>... > "Fly.Li" <fly2nn@126.com> writes: > > version: PG8.2.2 > > MY Question: > > Why must "take the same number of parameters" ? > > Because the GIN code will call it with a particular number of arguments. > > > When I use tsearch2, I found that gin_extract_tsquery() has 3 > > parameters, it > > break the rule "take the same number of parameters". > > 3 is the correct number of parameters for an extractQuery function > (before 8.4 anyway), so I'm not clear what you are complaining about. > > regards, tom lane > > -- > Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-hackers >
"Fly.Li" <fly2nn@126.com> writes: > 1 ginarrayextract() has 2 parameters > 2 gin_extract_tsquery() has 3 parameters > 3 run sql(from plsql/src/test/regress/sql/opr_sanity.sql), it expect no > results: Well, actually what's cheating here is ginarrayextract, not tsearch2. That was fixed as of 8.3. regards, tom lane