Unable to anaylze T-SQL file, ClassCastException

Hello,

Versions used

  • SonarQube 7.9.1 Developer Edition
  • SonarTSQL 1.4 (build 3334)
  • SonarScanner MSBuild 4.6.2
  • Microsoft Visual STudio Team Foundation Server 16.131.28106.2

Error observed

2019-08-21T14:10:30.3311544Z 10:10:30.329 INFO: Sensor T-SQL Sensor [tsql]
2019-08-21T14:10:30.3314459Z 10:10:30.329 INFO: 1 source files to be analyzed
2019-08-21T14:10:30.3319472Z 10:10:30.329 DEBUG: 'BaseDeDonnees/A-SonarTest/001-Test-SonarQube.sql' generated metadata with charset 'UTF-8'
2019-08-21T14:10:30.4312669Z 10:10:30.423 WARN: Unable to analyse file: /D:/Builds/agents/Agent2/351/s/BaseDeDonnees/A-SonarTest/001-Test-SonarQube.sql
2019-08-21T14:10:30.4313408Z java.lang.ClassCastException: com.sonarsource.tsql.B.A.A.$H cannot be cast to com.sonarsource.tsql.B.A.B.b$_J
2019-08-21T14:10:30.4313661Z 	at com.sonarsource.tsql.A.e.D(Unknown Source)
2019-08-21T14:10:30.4313846Z 	at com.sonarsource.tsql.A.e.B(Unknown Source)
2019-08-21T14:10:30.4314419Z 	at com.sonarsource.tsql.plugin.F$_A.A(Unknown Source)
2019-08-21T14:10:30.4314613Z 	at com.sonarsource.tsql.B.B.B$_A.A(Unknown Source)
2019-08-21T14:10:30.4314798Z 	at com.sonarsource.tsql.B.B.B.G(Unknown Source)
2019-08-21T14:10:30.4314992Z 	at com.sonarsource.tsql.B.B.B.H(Unknown Source)
2019-08-21T14:10:30.4315178Z 	at java.util.Iterator.forEachRemaining(Unknown Source)
2019-08-21T14:10:30.4315395Z 	at com.sonarsource.tsql.B.B.B.C(Unknown Source)
2019-08-21T14:10:30.4315573Z 	at com.sonarsource.tsql.B.B.B.G(Unknown Source)
2019-08-21T14:10:30.4315770Z 	at com.sonarsource.tsql.B.B.B.H(Unknown Source)
2019-08-21T14:10:30.4315956Z 	at java.util.Iterator.forEachRemaining(Unknown Source)
2019-08-21T14:10:30.4316157Z 	at com.sonarsource.tsql.B.B.B.C(Unknown Source)
2019-08-21T14:10:30.4316339Z 	at com.sonarsource.tsql.B.B.B.G(Unknown Source)
2019-08-21T14:10:30.4316529Z 	at com.sonarsource.tsql.B.B.B.A(Unknown Source)
2019-08-21T14:10:30.4316726Z 	at com.sonarsource.tsql.plugin.B.A(Unknown Source)
2019-08-21T14:10:30.4316920Z 	at com.sonarsource.tsql.plugin.B.B(Unknown Source)
2019-08-21T14:10:30.4317117Z 	at com.sonarsource.tsql.plugin.B.A(Unknown Source)
2019-08-21T14:10:30.4317307Z 	at com.sonarsource.tsql.plugin.B.execute(Unknown Source)
2019-08-21T14:10:30.4317540Z 	at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:48)
2019-08-21T14:10:30.4317781Z 	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85)
2019-08-21T14:10:30.4318038Z 	at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:59)
2019-08-21T14:10:30.4318282Z 	at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
2019-08-21T14:10:30.4318531Z 	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:59)
2019-08-21T14:10:30.4318768Z 	at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:82)
2019-08-21T14:10:30.4319029Z 	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
2019-08-21T14:10:30.4319262Z 	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
2019-08-21T14:10:30.4319554Z 	at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:400)
2019-08-21T14:10:30.4320740Z 	at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:395)
2019-08-21T14:10:30.4321316Z 	at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:392)
2019-08-21T14:10:30.4321782Z 	at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:358)
2019-08-21T14:10:30.4322213Z 	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
2019-08-21T14:10:30.4322640Z 	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
2019-08-21T14:10:30.4323122Z 	at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:141)
2019-08-21T14:10:30.4323615Z 	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
2019-08-21T14:10:30.4324034Z 	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
2019-08-21T14:10:30.4324409Z 	at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:73)
2019-08-21T14:10:30.4324832Z 	at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
2019-08-21T14:10:30.4325239Z 	at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
2019-08-21T14:10:30.4325677Z 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2019-08-21T14:10:30.4326112Z 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2019-08-21T14:10:30.4326649Z 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2019-08-21T14:10:30.4327001Z 	at java.lang.reflect.Method.invoke(Unknown Source)
2019-08-21T14:10:30.4327356Z 	at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
2019-08-21T14:10:30.4328059Z 	at com.sun.proxy.$Proxy0.execute(Unknown Source)
2019-08-21T14:10:30.4328458Z 	at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:185)
2019-08-21T14:10:30.4328853Z 	at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:137)
2019-08-21T14:10:30.4329114Z 	at org.sonarsource.scanner.cli.Main.execute(Main.java:111)
2019-08-21T14:10:30.4329308Z 	at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
2019-08-21T14:10:30.4329509Z 	at org.sonarsource.scanner.cli.Main.main(Main.java:61)
2019-08-21T14:10:30.4329659Z 
2019-08-21T14:10:30.4329849Z 10:10:30.423 INFO: 1/1 files, last analyzed (94 ms): BaseDeDonnees/A-SonarTest/001-Test-SonarQube.sql
2019-08-21T14:10:30.4330082Z 10:10:30.423 INFO: Sensor T-SQL Sensor [tsql] (done) | time=94ms

Steps to reproduce
Analyze T-SQL file with this content :

create trigger [MyTrigger] on MySchema.MyTable
for insert
as
begin
	declare @MyValue nvarchar(max)
	with MyMessages as (select MyMessage = 'test')
	select @MyValue = MyColumn1
	from (select MyColumn1 = (select MyMessage From MyMessages)) as Value1
		
	if (@MyValue <> '')
	begin
		raiserror(@MyValue, 11, 1)
	end
end
go

Could I provide anythings else to help with my issue ?
Thanks,
Alain

1 Like

Hi,

This is indeed a bug in our T-SQL analyzer: I created SONARTSQL-242 to track it.
As a temporary workaround, you may disable the faulty rule or exclude the file on which the failure happens.

Thanks a lot for the feedback and the very clear report with the small reproducer!

Pierre-Yves

1 Like

Hi Pierre-Yves,
Could you confirm your workaround is working please. After fews tests, the file seems to be unparsed with tsql:S4109 disabled.
Thank you

Alain

Hi,

I’m not sure what you mean by “the file seems to be unparsed”.

I confirm that disabling the rule in the quality profile works.
Please make sure that the project which you analyze is indeed using a quality profile where the rule is disabled.
If you still have a stacktrace in your logs, it should be a different one, and you can share it here.

Pierre-Yves