Yields the most common casing for names used in db functions
(self)
| 836 | yield from cur |
| 837 | |
| 838 | def casing(self): |
| 839 | """Yields the most common casing for names used in db functions""" |
| 840 | with self.conn.cursor() as cur: |
| 841 | query = r""" |
| 842 | WITH Words AS ( |
| 843 | SELECT regexp_split_to_table(prosrc, '\W+') AS Word, COUNT(1) |
| 844 | FROM pg_catalog.pg_proc P |
| 845 | JOIN pg_catalog.pg_namespace N ON N.oid = P.pronamespace |
| 846 | JOIN pg_catalog.pg_language L ON L.oid = P.prolang |
| 847 | WHERE L.lanname IN ('sql', 'plpgsql') |
| 848 | AND N.nspname NOT IN ('pg_catalog', 'information_schema') |
| 849 | GROUP BY Word |
| 850 | ), |
| 851 | OrderWords AS ( |
| 852 | SELECT Word, |
| 853 | ROW_NUMBER() OVER(PARTITION BY LOWER(Word) ORDER BY Count DESC) |
| 854 | FROM Words |
| 855 | WHERE Word ~* '.*[a-z].*' |
| 856 | ), |
| 857 | Names AS ( |
| 858 | --Column names |
| 859 | SELECT attname AS Name |
| 860 | FROM pg_catalog.pg_attribute |
| 861 | UNION -- Table/view names |
| 862 | SELECT relname |
| 863 | FROM pg_catalog.pg_class |
| 864 | UNION -- Function names |
| 865 | SELECT proname |
| 866 | FROM pg_catalog.pg_proc |
| 867 | UNION -- Type names |
| 868 | SELECT typname |
| 869 | FROM pg_catalog.pg_type |
| 870 | UNION -- Schema names |
| 871 | SELECT nspname |
| 872 | FROM pg_catalog.pg_namespace |
| 873 | UNION -- Parameter names |
| 874 | SELECT unnest(proargnames) |
| 875 | FROM pg_proc |
| 876 | ) |
| 877 | SELECT Word |
| 878 | FROM OrderWords |
| 879 | WHERE LOWER(Word) IN (SELECT Name FROM Names) |
| 880 | AND Row_Number = 1; |
| 881 | """ |
| 882 | _logger.debug("Casing Query. sql: %r", query) |
| 883 | cur.execute(query) |
| 884 | for row in cur: |
| 885 | yield row[0] |
| 886 | |
| 887 | def explain_prefix(self): |
| 888 | return "EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON) " |
no test coverage detected