Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Options for WhitespaceAround too long #75

Closed
marschall opened this issue Feb 14, 2017 · 6 comments
Closed

Options for WhitespaceAround too long #75

marschall opened this issue Feb 14, 2017 · 6 comments
Milestone

Comments

@marschall
Copy link
Contributor

marschall commented Feb 14, 2017

Sonar version: 5.6.5
Checkstyle sonar plugin verson: 3.6-SNAPSHOT

Steps to reproduce or description of problem:

When I start SonarQube I get the following error

Caused by: org.h2.jdbc.JdbcSQLException: Value too long for column "PARAM_TYPE VARCHAR(512) NOT NULL": "'SINGLE_SELECT_LIST,multiple=true,values=""ASSIGN,ARRAY_INIT,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLO... (549)"; SQL statement:
INSERT INTO rules_parameters (rule_id, name, param_type, default_value, description)
    VALUES (?, ?, ?, ?, ?) [22001-176]

Full log:

2017.02.20 00:10:15 INFO  web[][o.s.s.s.RegisterMetrics] Register metrics
2017.02.20 00:10:15 INFO  web[][o.s.s.r.RegisterRules] Register rules
2017.02.20 00:10:16 INFO  web[][o.s.s.n.NotificationDaemon] Notification service stopped
2017.02.20 00:10:16 INFO  web[][o.s.s.p.d.EmbeddedDatabase] Embedded database stopped
2017.02.20 00:10:16 ERROR web[][o.a.c.c.C.[.[.[/]] Exception sending context initialized event to listener instance of class org.sonar.server.platform.web.PlatformServletContextListener
org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: org.h2.jdbc.JdbcSQLException: Value too long for column "PARAM_TYPE VARCHAR(512) NOT NULL": "'SINGLE_SELECT_LIST,multiple=true,values=""ASSIGN,ARRAY_INIT,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLO... (549)"; SQL statement:
INSERT INTO rules_parameters (rule_id, name, param_type, default_value, description)
    VALUES (?, ?, ?, ?, ?) [22001-176]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:344)
	at org.h2.message.DbException.get(DbException.java:178)
	at org.h2.table.Column.validateConvertUpdateSequence(Column.java:332)
	at org.h2.table.Table.validateConvertUpdateSequence(Table.java:726)
	at org.h2.command.dml.Insert.insertRows(Insert.java:152)
	at org.h2.command.dml.Insert.update(Insert.java:115)
	at org.h2.command.CommandContainer.update(CommandContainer.java:79)
	at org.h2.command.Command.executeUpdate(Command.java:254)
	at org.h2.server.TcpServerThread.process(TcpServerThread.java:346)
	at org.h2.server.TcpServerThread.run(TcpServerThread.java:160)
	at java.lang.Thread.run(Thread.java:745)

### The error may involve org.sonar.db.rule.RuleMapper.insertParameter-Inline
### The error occurred while setting parameters
### Cause: org.h2.jdbc.JdbcSQLException: Value too long for column "PARAM_TYPE VARCHAR(512) NOT NULL": "'SINGLE_SELECT_LIST,multiple=true,values=""ASSIGN,ARRAY_INIT,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLO... (549)"; SQL statement:
INSERT INTO rules_parameters (rule_id, name, param_type, default_value, description)
    VALUES (?, ?, ?, ?, ?) [22001-176]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:344)
	at org.h2.message.DbException.get(DbException.java:178)
	at org.h2.table.Column.validateConvertUpdateSequence(Column.java:332)
	at org.h2.table.Table.validateConvertUpdateSequence(Table.java:726)
	at org.h2.command.dml.Insert.insertRows(Insert.java:152)
	at org.h2.command.dml.Insert.update(Insert.java:115)
	at org.h2.command.CommandContainer.update(CommandContainer.java:79)
	at org.h2.command.Command.executeUpdate(Command.java:254)
	at org.h2.server.TcpServerThread.process(TcpServerThread.java:346)
	at org.h2.server.TcpServerThread.run(TcpServerThread.java:160)
	at java.lang.Thread.run(Thread.java:745)

	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:154)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:141)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:51)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
	at com.sun.proxy.$Proxy39.insertParameter(Unknown Source)
	at org.sonar.db.rule.RuleDao.insertRuleParam(RuleDao.java:116)
	at org.sonar.server.rule.RegisterRules.mergeParams(RegisterRules.java:327)
	at org.sonar.server.rule.RegisterRules.registerRule(RegisterRules.java:158)
	at org.sonar.server.rule.RegisterRules.start(RegisterRules.java:103)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.invokeMethod(ReflectionLifecycleStrategy.java:110)
	at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.start(ReflectionLifecycleStrategy.java:89)
	at org.sonar.core.platform.ComponentContainer$1.start(ComponentContainer.java:320)
	at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84)
	at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169)
	at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132)
	at org.picocontainer.behaviors.Stored.start(Stored.java:110)
	at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1016)
	at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1009)
	at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:767)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:141)
	at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:88)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup.access$001(PlatformLevelStartup.java:40)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup$1.doPrivileged(PlatformLevelStartup.java:70)
	at org.sonar.server.user.DoPrivileged.execute(DoPrivileged.java:46)
	at org.sonar.server.platform.platformlevel.PlatformLevelStartup.start(PlatformLevelStartup.java:67)
	at org.sonar.server.platform.Platform.executeStartupTasks(Platform.java:201)
	at org.sonar.server.platform.Platform.doStart(Platform.java:114)
	at org.sonar.server.platform.Platform.doStart(Platform.java:99)
	at org.sonar.server.platform.web.PlatformServletContextListener.contextInitialized(PlatformServletContextListener.java:45)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4812)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.h2.jdbc.JdbcSQLException: Value too long for column "PARAM_TYPE VARCHAR(512) NOT NULL": "'SINGLE_SELECT_LIST,multiple=true,values=""ASSIGN,ARRAY_INIT,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLO... (549)"; SQL statement:
INSERT INTO rules_parameters (rule_id, name, param_type, default_value, description)
    VALUES (?, ?, ?, ?, ?) [22001-176]
	at org.h2.engine.SessionRemote.done(SessionRemote.java:606)
	at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:192)
	at org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:199)
	at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
	at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:44)
	at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:69)
	at org.apache.ibatis.executor.ReuseExecutor.doUpdate(ReuseExecutor.java:50)
	at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:105)
	at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:71)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:152)
	... 41 common frames omitted
2017.02.20 00:10:16 ERROR web[][o.a.c.c.StandardContext] One or more listeners failed to start. Full details will be found in the appropriate container log file
2017.02.20 00:10:16 ERROR web[][o.a.c.c.StandardContext] Context [] startup failed due to previous errors

It looks as if this is caused by the options for WhitespaceAroundCheck introduced in #67.

@rnveach
Copy link
Member

rnveach commented Feb 15, 2017

@romani How are we fixing this? Is this just a issue with the rule file?

The mentioned fix 4084987#diff-7e847188273a49bacd3f0bad7feffc1aR1606, puts all the tokens in the type field which is what is causing the error Value too long for column "PARAM_TYPE VARCHAR(512) NOT NULL".

Other checks just list said type as STRING.

<param key="tokens" type="STRING">
<defaultValue>CLASS_DEF,INTERFACE_DEF,ENUM_DEF,ANNOTATION_DEF,ANNOTATION_FIELD_DEF,ENUM_CONSTANT_DEF,PARAMETER_DEF,VARIABLE_DEF,METHOD_DEF,CTOR_DEF</defaultValue>
</param>

Should we stick to all tokens in type and just default to STRING if list becomes too long (512 bytes or more)?

@romani
Copy link
Member

romani commented Feb 15, 2017

If it will work, I am fine with such fix.

@marschall
Copy link
Contributor Author

I recommendation would be to go simply with STRING as well.

@rnveach
Copy link
Member

rnveach commented Feb 15, 2017

I don't have a working sonar to test and play with yet, but how big is the default value field which also can hold the same information?

@marschall
Copy link
Contributor Author

rules_parameters.default_value is VARCHAR(4000) but rules_parameters.param_type is only VARCHAR(512)

romani added a commit that referenced this issue Feb 18, 2017
@romani
Copy link
Member

romani commented Feb 18, 2017

I tested datatype conversion to STRING - it works fine, rule works fine.
Looks like sonar do maintenance of types on DB himself.

so in 3.6: we convert type from "s{}" to "STRING" and it works fine.

@romani romani closed this as completed Feb 18, 2017
@romani romani added the bug label Feb 18, 2017
@romani romani added this to the 3.6 milestone Feb 18, 2017
romani added a commit that referenced this issue Feb 21, 2017
…nged from s[...] to STRING"

This reverts commit dbc1f83.
tsjensen pushed a commit to checkstyle-addons/sonar-checkstyle that referenced this issue Mar 21, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants