Merge pull request #2877 from pchaigno/fix-plpgsql-heuristic

Fix PLpgSQL heuristic rule
This commit is contained in:
Arfon Smith
2016-03-12 06:01:59 -07:00
3 changed files with 42 additions and 1 deletions

View File

@@ -354,7 +354,7 @@ module Linguist
end
disambiguate ".sql" do |data|
if /^\\i\b|AS \$\$|LANGUAGE '+plpgsql'+/i.match(data) || /SECURITY (DEFINER|INVOKER)/i.match(data) || /BEGIN( WORK| TRANSACTION)?;/i.match(data)
if /^\\i\b|AS \$\$|LANGUAGE '?plpgsql'?/i.match(data) || /SECURITY (DEFINER|INVOKER)/i.match(data) || /BEGIN( WORK| TRANSACTION)?;/i.match(data)
#Postgres
Language["PLpgSQL"]
elsif /(alter module)|(language sql)|(begin( NOT)+ atomic)/i.match(data) || /signal SQLSTATE '[0-9]+'/i.match(data)

View File

@@ -0,0 +1,31 @@
load 'plpgsql';
load 'plpgsql_lint';
DROP FUNCTION IF EXISTS list_sites();
CREATE OR REPLACE FUNCTION list_sites() RETURNS TABLE (fc json) AS
$func$
BEGIN
RETURN QUERY SELECT row_to_json(feat_col) FROM (
SELECT 'FeatureCollection' AS type, array_to_json(array_agg(feat)) AS features FROM (
SELECT DISTINCT ON (new_id) 'Feature' AS type, ST_ASGeoJSON(loc.geom)::json AS geometry, row_to_json(
(SELECT prop FROM (SELECT new_id) AS prop)) AS properties FROM location loc) AS feat) AS feat_col;
END;
$func$ LANGUAGE plpgsql;
DROP FUNCTION IF EXISTS get_observations(character varying, integer);
CREATE OR REPLACE FUNCTION get_observations(kind varchar, site_id integer) RETURNS TABLE (fc json) AS
$func$
BEGIN
IF kind = 'o2_abs' THEN
RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM (
SELECT observation_date AS date, o2_abs AS value FROM oxygen WHERE new_id = site_id) AS obs;
ELSIF kind = 'o2_rel' THEN
RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM (
SELECT observation_date AS date, o2_rel AS value FROM oxygen WHERE new_id = site_id) AS obs;
ELSIF kind = 'temp' THEN
RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM (
SELECT observation_date AS date, temp AS value FROM oxygen WHERE new_id = site_id) AS obs;
END IF;
END;
$func$ LANGUAGE plpgsql;

View File

@@ -189,6 +189,16 @@ class TestHeuristcs < Minitest::Test
})
end
# Candidate languages = ["SQL", "PLpgSQL", "SQLPL", "PLSQL"]
def test_sql_by_heuristics
assert_heuristics({
"SQL" => ["SQL/create_stuff.sql", "SQL/db.sql", "SQL/dual.sql"],
"PLpgSQL" => all_fixtures("PLpgSQL", "*.sql"),
"SQLPL" => ["SQLPL/trigger.sql"],
"PLSQL" => all_fixtures("PLSQL", "*.sql")
})
end
# Candidate languages = ["Perl", "Perl6"]
def test_t_perl_by_heuristics
assert_heuristics({