Git Product home page Git Product logo

sqlparser / gsp_demo Goto Github PK

View Code? Open in Web Editor NEW
21.0 21.0 12.0 54.95 MB

General SQL Parser is a Java/.NET library. It provides a rich set of APIs to parse, decode, analyze and rewrite SQL scripts. Supports more than 10 major database platforms. This repo provides demos and testcases to help people make better use of the General SQL Parser

Home Page: http://www.sqlparser.com

C# 31.39% CSS 0.02% XSLT 0.18% Java 61.94% PLpgSQL 0.41% PLSQL 2.21% Batchfile 0.97% TSQL 2.88%

gsp_demo's People

Contributors

cnfree avatar sqlparser avatar zxhehe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gsp_demo's Issues

why use order by in sql by hive ,not find any tables?

        String sql = "select id,name from food  order by id";
        TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvhive));
	sqlparser.setSqltext(sql);
	int ret = sqlparser.parse();
        if (ret != 0) {
			LOG.error(sqlparser.getErrormessage());
			return null;
	}
// .....

it print syntax error, state:335(10102) near: by(1,33) no_root_node(-1000) near: no root node(0,0) null

but EDbVendor.dbvmysql ,it can pass , why? please

Java demo columnAnalyze, NullPointerException

Oracle sample SQL:

CREATE VIEW LADEHISTORIE_V

AS

SELECT

objekt, datum, endgueltigflag, zeitstempel

FROM

(

            SELECT

                          'Programm' AS objekt

                        , r.datum

                        , MAX(s.endgueltigflag) AS endgueltigflag

                        , MAX(r.load_timestamp) AS zeitstempel

            FROM dm_mediafacts.reichweite_v r

            JOIN dm_mediafacts.sendeprotokoll_v s

            ON r.p_hk = s.p_hk

            GROUP BY 1, 2

            UNION

            SELECT

                          'Tagesmarktanteil' AS objekt

                        , datum

                        , MAX(endgueltigflag) AS endgueltigflag

                        , MAX(load_timestamp) AS zeitstempel

            FROM dm_mediafacts.ganztag_v

            GROUP BY 1, 2

            UNION

            SELECT

                          '5-Minuten' AS objekt

                        , datum

                        , MAX(endgueltigflag) AS endgueltigflag

                        , MAX(load_timestamp) AS zeitstempel

            FROM dm_mediafacts.intervall5_v

            GROUP BY 1, 2

) t
;
 

CREATE VIEW ganztag_v

AS

SELECT

    CAST(s_tg.videoscope_date AS DATE) AS DATUM

    , s_mf.sender_id       AS SENDER_ID

    , s_zg.zielgruppe_id   AS ZIELGRUPPE_ID

    , s_tg.sehbeteiligung_mio AS SEHB_MIO

    , s_tg.sehbeteiligung_tvgesamt_mio AS SEHB_FSGES_MIO

    , s_tg.marktanteil     AS MARKTANTEIL

    , s_stis.ist_endgueltig AS ENDGUELTIGFLAG

  , GREATEST(

      s_tg.load_timestamp

    , s_mf.load_timestamp

    , s_zg.load_timestamp

    ) AS LOAD_TIMESTAMP

FROM raw_vault.s_slotmessungen_tagesslot s_tg

JOIN raw_vault.l_slotmessungen_sender l_sms

  ON s_tg.h_slotmessungen_hk = l_sms.h_slotmessungen_hk

JOIN raw_vault.l_zielgruppe_slotmessungen l_zs

  ON s_tg.h_slotmessungen_hk = l_zs.h_slotmessungen_hk

JOIN business_vault.s_slotmessungen_tagesslot_bv_ist_endgueltig s_stis

  ON s_tg.h_slotmessungen_hk = s_stis.h_slotmessungen_hk

JOIN raw_vault.s_sender_mf s_mf

  ON l_sms.h_sender_hk = s_mf.h_sender_hk

AND s_mf.is_deleted = FALSE

AND s_mf.delivery_end_timestamp = '9999-12-31 00:00:00.0'

JOIN raw_vault.s_zielgruppe_mf s_zg

  ON l_zs.h_zielgruppe_hk = s_zg.h_zielgruppe_hk

AND s_zg.is_deleted = FALSE

AND s_zg.delivery_end_timestamp = '9999-12-31 00:00:00.0'

WHERE s_tg.is_deleted = FALSE

AND s_tg.delivery_end_timestamp = '9999-12-31 00:00:00.0'

https://github.com/sqlparser/gsp_demo/tree/master/java/src/demos/columnAnalyze

Fix NullPointerException of java/src/demos/analyzeview

https://github.com/sqlparser/gsp_demo/tree/master/java/src/demos/analyzeview
This demo can't work correctly using the latest gsp java core library for this Teradata script:

replace	view APBV.Complex_View as 
SELECT 
 BSUBS.edw_key AS Subs_Id, 
 BACCT.edw_key AS Acct_Id, 
 BCUST.edw_key AS Cust_Id, 
 fact.srvc_key, 
 prov_prepay.Recharge_Name,
 wbsd.prd_type_cd, 
 Substr(CASE 
 		WHEN acc.account_type = 'POST' THEN 'Postpay' 
 		WHEN acc.account_type = 'PRE' THEN 'Prepay' 
 		ELSE acc.account_type 
 		END, 1, 30) AS Acct_Type_Cd, 
 CASE 
 	WHEN acc.account_type = 'POST' THEN 
 		CASE 
 			WHEN crp.plan_grp2_code = 'Voice' THEN 'Handset' 
 			ELSE 
 				COALESCE(COALESCE(crp.plan_grp2_code, BSM1.plan_type_cd), 'Handset') 
 			END 
 		ELSE 
 			CASE 
 				WHEN ht.product_curr_name = 'USIM Only Mobile Broadband' 
 					OR ht.data_capablty_id = 'MBB' THEN 'MBB' 
 				WHEN prov_prepay.line_of_bus = 'Voice' THEN 'Handset' 
 				ELSE COALESCE(COALESCE(prov_prepay.line_of_bus, BSM1.plan_type_cd), 'Handset') 
 			END 
 		END AS Plan_Type_Cd,  
 370 AS Ctl_Id, 
 
FROM APBV.h_snap_cdw AS fact 
 INNER JOIN APBV.w_bus_snap_drvr AS wbsd 
 	ON ( fact.prd_dt = wbsd.prd_dt 
 			AND wbsd.subj_area_cd = fact.subj_area_cd 
 			AND wbsd.prd_type_cd IN ( 'WEEK', 'MONTH' ) ) 
 INNER JOIN accv.cdw_ser_service AS svc 
 	ON ( fact.srvc_key = svc.service_key ) 
 INNER JOIN accv.cdw_acc_account AS acc 
 	ON ( svc.account_id = acc.account_id 
 			AND fact.prd_dt || ' 23:59:59' BETWEEN acc.eff_start_date AND acc.eff_end_date 
 		) 
 INNER JOIN accv.cdw_cus_customer AS cus 
 	ON ( acc.customer_id = cus.customer_id 
 			AND fact.prd_dt || ' 23:59:59' BETWEEN cus.eff_start_date AND  cus.eff_end_date 
 		) 
 INNER JOIN APBV.bkey_subs_id AS BSUBS 
 	ON ( svc.service_instld_product_id = BSUBS.source_key 
 			AND BSUBS.end_dt = '9999-12-31' ) 
 INNER JOIN APBV.bkey_acct_id AS BACCT 
 	ON ( acc.account_id = BACCT.source_key 
 		AND BACCT.end_dt = '9999-12-31' ) 
 INNER JOIN APBV.bkey_cust_id AS BCUST 
 	ON ( cus.customer_id = BCUST.source_key 
 			AND BCUST.end_dt = '9999-12-31' ) 
 INNER JOIN APBV.w_cdw_dim_snap_drvr AS Dt_Fact 
 	ON ( fact.srvc_key = Dt_Fact.srvc_key 
 			AND fact.meas_cd = Dt_Fact.meas_cd 
 			AND fact.prd_dt = Dt_Fact.prd_dt ) 
 LEFT JOIN accv.cdw_cus_customer_indiv AS cusind 
 	ON ( cusind.customer_id = cus.customer_id 
 		AND fact.prd_dt || ' 23:59:59' BETWEEN cusind.eff_start_date AND  cusind.eff_end_date ) 
 LEFT JOIN accv.cdw_cus_customer_org AS cusorg 
 	ON ( cus.customer_id = cusorg.customer_id 
 		AND fact.prd_dt || ' 23:59:59' BETWEEN cusorg.eff_start_date AND  cusorg.eff_end_date ) 
 LEFT JOIN accv.cdw_mrd_rate_plan AS crp 
 	ON ( crp.product_id = Dt_Fact.sptp_product_id 
 		AND crp.curr_flag = 'Y' ) 
 LEFT JOIN accv.cdw_ser_order_events AS oe 
 	ON ( oe.event_capture_id = svc.sale_order_capture_id 
 		AND oe.order_stat <> '1' ) 
 LEFT JOIN amv.prod AS PROD_TP 
 	ON ( Dt_Fact.sptp_product_id = PROD_TP.prod_cd ) 
 LEFT JOIN amv.prod AS Prod_HS 
 	ON ( Dt_Fact.sphs_product_id = Prod_HS.prod_cd ) 
 LEFT JOIN accv.cdw_mrd_handset_type AS ht 
 	ON ( Dt_Fact.sphs_product_id = ht.product_id 
 		AND ht.curr_flag = 'Y' ) 
 LEFT JOIN (SELECT DISTINCT CSRD.account_name, 
 	CSRD.service_name, 
 	CASE 
 		WHEN CSRD.payment_type LIKE 'Data Recharge%' THEN  'Data Recharge '  || CSRD.payment_amount 
 		ELSE 'Voice Recharge ' || CSRD.payment_amount 
 	END AS Recharge_Name, 
 Rank() 
 	OVER(partition BY CSRD.account_name, 
 				CSRD.service_name 
 			ORDER BY CSRD.receipt_nr ) AS dr 
 FROM accv.cdw_svw_recharge_dtls AS CSRD 
 LEFT JOIN accv.cdw_mrd_rate_plan AS 
 prepay_plan 
 ON ( CSRD.payment_amount = 
 prepay_plan.mthly_cap_amt 
 AND prepay_plan.curr_flag = 'Y' 
 AND prepay_plan.rate_plan_ldesc LIKE 
 '%Prepaid%' 
 AND prepay_plan.plan_grp2_code = 'Voice' ) 
 LEFT JOIN accv.cdw_mrd_rate_plan AS 
 prepay_plan_mbb 
 ON ( CSRD.payment_amount = 
 prepay_plan_mbb.mthly_cap_amt 
 AND prepay_plan_mbb.curr_flag = 'Y' 
 AND prepay_plan_mbb.rate_plan_ldesc LIKE 
 '%Prepaid%' 
 AND prepay_plan_mbb.plan_grp2_code = 'MBB' 
 )  
  WHERE CSRD.payment_type NOT IN ( 
 'Goodwill Adj', 'Prepaid Goodwill Adj', 
 'Provisioning failures Adj', 
 'Top-Up Correction Adjustment' )) AS 
 prov_prepay 
 ON ( Cast(prov_prepay.account_name AS DECIMAL(18, 0)) = 
 acc.account_num 
 AND prov_prepay.service_name = svc.service_num_code 
 AND prov_prepay.recharge_date = svc.service_actvn_date 
 AND prov_prepay.dr = 1 ) 
 
;

Original related issue :
https://github.com/sqlparser/wings/issues/166

Support for WITH () Clause

SQL Parser is not able to correctly parse WITH clauses. When I try to analyze the following MS SQL statement, I am not getting the WITH node in the JSON output. When using the SQL Parser demo I get: 'syntax error, state:686(10101) near: PersonCTE(1,8)'

WITH   PersonCTE (BusinessEntityID, FirstName, LastName)
AS     (SELECT Person.BusinessEntityID,
               FirstName,
               LastName
        FROM   Person.Person
        WHERE  LastName LIKE 'C%'),
PhoneCTE (BusinessEntityID, PhoneNumber)
AS     (SELECT BusinessEntityID,
               PhoneNumber
        FROM   Person.PersonPhone)
SELECT FirstName,
       LastName,
       PhoneNumber
FROM   PersonCTE
INNER JOIN
PhoneCTE
ON PersonCTE.BusinessEntityID = PhoneCTE.BusinessEntityID

Enhancement - SQLFlow JSON Output: Include information from INSERT and DELETE statements in procedures.

We consider this as lineage because in some cases we may have store procedures that produce a full refresh of data. That is doing a Truncate/Delete followed by and Insert. For these type of store procedures, we will have no lineage from the JSON. We have seen in the SQLFlow demo in the Sample SQl that relationships are included in the JSON for INSERT statements. That is why we were wondering why they are not included in the store proc JSON.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.