Sequence Strategy for MYSQL not working (EclipseLink, Glassfish) - mysql

Sequence Strategy for MYSQL not working
I have an Id defined in my entity:
#Id
#GeneratedValue(strategy = GenerationType.AUTO)
private int id;
When persisting an entity I get the following error. I checked several hints, but noone worked for me.
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.0.v20170811-d680af5): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1
Error Code: 1064
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
bind => [2 parameters bound]
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
MYSQL Version : 8
SQL "UPDATE SEQUENCE ..." can be executed from the workbench without problems. "OPTION SQL_SELECT_LIMIT=DEFAULT" seems not to be valid.
I guess "OPTION SQL_SELECT_LIMIT=DEFAULT" is coming implicitely when .persist() is called, because of the sequence strategie.
Any help hints ?
UPDATE
Switching to
strategy = GenerationType.IDENTITY
does not invoke "OPTION SQL_SELECT_LIMIT=DEFAULT" and it works fine. Strange.

Related

BadSQLGrammarException

I have this mapper:
<insert id="insertBatch" parameterType="java.util.Set">
<foreach collection="filterParameterEntitySet" item="item" separator=";">
INSERT INTO filter_parameter
(
filter_key,
filter_value,
filter_id
)
VALUES
(
#{item.filterKey},
#{item.filterValue},
#{item.filter.id}
)
ON CONFLICT DO NOTHING
</foreach>
</insert>
Whenever I execute it, it throws BadSQLGrammarException:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONFLICT DO NOTHING
**
;
INSERT INTO filter_parameter
f' at line 13**
What could be the problem? I can't figure out where does the syntax error lie!
Try this:
<insert id="insertBatch" parameterType="java.util.Set">
INSERT INTO filter_parameter
(
filter_key,
filter_value,
filter_id
) VALUES
<foreach collection="filterParameterEntitySet" item="item" separator=",">
(
#{item.filterKey},
#{item.filterValue},
#{item.filter.id}
)
</foreach>
ON CONFLICT DO NOTHING
</insert>
So basically, there were 2 mistakes in the query:
The separator, instead of this: separator=";"
I should use this: separator=","
ON CONFLICT DO NOTHING is not valid in mysql and I was using mysql (it's for postgres), so I removed it and added the keyword IGNORE after INSERT to reserve the same functionality

Not able to create mysql user with AWSAuthenticationPlugin with terraform

I am trying to create a MySQL user to use with IAM, and I am using terraform to do this.
This is what I am trying to accomplish :
CREATE USER 'lambda' IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
with
provider "mysql" {
alias = "kadamb-test"
endpoint = "${aws_db_instance.kadamb-test.endpoint}"
username = "${aws_db_instance.kadamb-test.username}"
password = "${aws_db_instance.kadamb-test.password}"
}
resource "mysql_user" "kadamb-test-iam-user" {
provider = "mysql.kadamb-test"
user = "kadamb_test_user"
host = "%"
auth_plugin = "AWSAuthenticationPlugin"
tls_option = ""
}
This is the output when I am running terraform-apply:
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
+ mysql_user.kadamb-test-iam-user
id: <computed>
auth_plugin: "AWSAuthenticationPlugin"
host: "%"
user: "kadamb_test_user"
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
mysql_user.kadamb-test-iam-user: Creating...
auth_plugin: "" => "AWSAuthenticationPlugin"
host: "" => "%"
user: "" => "kadamb_test_user"
Error: Error applying plan:
1 error(s) occurred:
* mysql_user.kadamb-test-iam-user: 1 error(s) occurred:
* mysql_user.kadamb-test-iam-user: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.
I am reading the documentation and trying to debug what is going wrong, but couldn't find anything.
Can anyone help me with this?
Just changing tls_option = "" to tls_option = "NONE", solved my problem.
I am not sure, how and what difference did it make, but I was able to create the user with this.

wpdb : select from custom table : sql error

I'm getting an error while trying to query a custom table using the wpdb class. Here is my code :
global $wpdb;
$dates_bloquees = $wpdb->query(
$wpdb->prepare( "SELECT datesbloquees FROM $wpdb->datesbloquees WHERE idproduit = '%d' ", $postid ) );
Error message :
WordPress database error: [You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near 'WHERE idproduit = '1'' at line 1]
Can someone tell me what I'm doing wrong?
Thank you for your help,
François

Running Stored procedure giving error can't return a result set in the given context

I know this problem has been asked many times. But I tried the solutions and they didn't work for me. I have a web application built on rails 3.2.12 and ruby 1.9.2p180. I have a stored procedure in it which returns me data of a query having 5 inner joins. Multiple rows approximately 600 are returned in present case. On the local the stored procedure runs fine with no issues. But when I tried it on the server it is throwing:
ActiveRecord::StatementInvalid: Mysql2::Error: PROCEDURE test.sp_procedure can't return a result set in the given context: call sp_procedure('2015-02-14 00:00:00 -0500', '2015-03-03 23:59:00 -0500', 5, '13')
I have searched for this issue and found that I need to set CLIENT_MULTI_RESULTS flag when establishing connection to MySQL server. For this I have done monkey patching as said. Here is the file in initializers:
module ActiveRecord
class Base
def self.mysql2_connection(config)
config[:username] = 'deploy' if config[:username].nil?
if Mysql2::Client.const_defined? :FOUND_ROWS
config[:flags] = config[:flags] ? config[:flags] | Mysql2::Client::FOUND_ROWS : Mysql2::Client::FOUND_ROWS
end
client = Mysql2::Client.new(config.symbolize_keys)
options = [config[:host], config[:username], config[:password], config[:database], config[:port], config[:socket], 0]
ConnectionAdapters::Mysql2Adapter.new(client, logger, options, config)
end
def self.select_sp(sql, name = nil)
connection = ActiveRecord::Base.connection
begin
connection.select_all(sql, name)
rescue NoMethodError
ensure
connection.reconnect! unless connection.active?
end
end
end
end
In my database.yml I have added: flags: <%= 65536 | 131072 %> and also tried with flags: 131072. But it didn't work.
However using the following works:
client = Mysql2::Client.new(:host => "localhost", :username => "root", :flags => Mysql2::Client::MULTI_STATEMENTS )
result = client.query( 'CALL sp_procedure('2015-02-14 00:00:00 -0500', '2015-03-03 23:59:00 -0500', 5, '13')')
This worked on the server too. But each time the stored procedure will run it will create a new connection which I don't want.
And also one thing to note while I am doing this on local as soon as I call the stored procedure I have to execute this:
ActiveRecord::Base.connection.reconnect!
If I don't write this it throws an error:
ActiveRecord::StatementInvalid: Mysql2::Error: Commands out of sync; you can't run this command now
So this is also the same thing means it creates a new connection each time. So I am finding for a solution which saves me from doing this.
And if the monkey patching is correct then what am I missing. Please help.

Server object error 'ASP 0177 : c0000005'

The full error:
The CreateObject of '(null)' caused exception C0000005.
Server object error 'ASP 0177 : c0000005'
Server.CreateObject Failed
/get.asp, line 35
get.asp - line 35:
Response.Status = "500 Internal Server Error"
set objErr=Server.GetLastError()
Col = objErr.Column
Cat = objErr.Category
Desc = objErr.Description
Fle = objErr.File
Lne = objErr.Line
Num = objErr.Number
Src = objErr.Source
ASPC = objErr.ASPCode
ASPD = objErr.ASPDescription
set SQLCOMM = Server.CreateObject("ADODB.Command") //line 35
SQLCOMM.ActiveConnection = DBConn_Str
SQLCOMM.CommandText = SQLq
SQLCOMM.CommandType = 1
SQLCOMM.CommandTimeout = 0
SQLCOMM.Prepared = true
SQLCOMM.Execute()
set SQLCOMM=Nothing
This script usually works, but for some odd reason it keeps giving this error every now and then lately. The most recent thing i did is make more table/col indexes in the MsSql DB, and i'm not sure why this is now happening. Does anybody know why?
The error is a windows Access Denied error. However what it disturbing is that it is an exception C00000005 rather than an error 80070005. Somewhere between CreateObject and the completion of initialising an ADODB.Command an access denied exception is being raised that isn't caught by normal means.
At this point in code the only thing being "accessed" is the ADODB.dll however its unlikely that this is truely a permissions problem. However if you are using windows integrated security on the site it my be worth seeing if there is a corelation between occurances and the user using the site.