Lokasi ngalangkungan proxy:   [ UP ]  
[Ngawartoskeun bug]   [Panyetelan cookie]                
Skip to content

Commit d1ce730

Browse files
fix: backtick table_name to allow all characters for MySQLChatMessageHistory (#15)
1 parent b107a43 commit d1ce730

2 files changed

Lines changed: 27 additions & 5 deletions

File tree

src/langchain_google_cloud_sql_mysql/mysql_chat_message_history.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def __init__(
3636
self._create_table_if_not_exists()
3737

3838
def _create_table_if_not_exists(self) -> None:
39-
create_table_query = f"""CREATE TABLE IF NOT EXISTS {self.table_name} (
39+
create_table_query = f"""CREATE TABLE IF NOT EXISTS `{self.table_name}` (
4040
id INT AUTO_INCREMENT PRIMARY KEY,
4141
session_id TEXT NOT NULL,
4242
data JSON NOT NULL,
@@ -50,9 +50,11 @@ def _create_table_if_not_exists(self) -> None:
5050
@property
5151
def messages(self) -> List[BaseMessage]: # type: ignore
5252
"""Retrieve the messages from Cloud SQL"""
53-
query = f"SELECT data, type FROM {self.table_name} WHERE session_id = '{self.session_id}' ORDER BY id;"
53+
query = f"SELECT data, type FROM `{self.table_name}` WHERE session_id = :session_id ORDER BY id;"
5454
with self.engine.connect() as conn:
55-
results = conn.execute(sqlalchemy.text(query)).fetchall()
55+
results = conn.execute(
56+
sqlalchemy.text(query), {"session_id": self.session_id}
57+
).fetchall()
5658
# load SQLAlchemy row objects into dicts
5759
items = [
5860
{"data": json.loads(result[0]), "type": result[1]} for result in results
@@ -62,7 +64,7 @@ def messages(self) -> List[BaseMessage]: # type: ignore
6264

6365
def add_message(self, message: BaseMessage) -> None:
6466
"""Append the message to the record in Cloud SQL"""
65-
query = f"INSERT INTO {self.table_name} (session_id, data, type) VALUES (:session_id, :data, :type);"
67+
query = f"INSERT INTO `{self.table_name}` (session_id, data, type) VALUES (:session_id, :data, :type);"
6668
with self.engine.connect() as conn:
6769
conn.execute(
6870
sqlalchemy.text(query),
@@ -76,7 +78,7 @@ def add_message(self, message: BaseMessage) -> None:
7678

7779
def clear(self) -> None:
7880
"""Clear session memory from Cloud SQL"""
79-
query = f"DELETE FROM {self.table_name} WHERE session_id = :session_id;"
81+
query = f"DELETE FROM `{self.table_name}` WHERE session_id = :session_id;"
8082
with self.engine.connect() as conn:
8183
conn.execute(sqlalchemy.text(query), {"session_id": self.session_id})
8284
conn.commit()

tests/integration/test_mysql_chat_message_history.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,23 @@ def test_chat_message_history(memory_engine: MySQLEngine) -> None:
5656
# verify clear() clears message history
5757
history.clear()
5858
assert len(history.messages) == 0
59+
60+
61+
def test_chat_message_history_custom_table_name(memory_engine: MySQLEngine) -> None:
62+
"""Test MySQLChatMessageHistory with custom table name"""
63+
history = MySQLChatMessageHistory(
64+
engine=memory_engine, session_id="test", table_name="message-store"
65+
)
66+
history.add_user_message("hi!")
67+
history.add_ai_message("whats up?")
68+
messages = history.messages
69+
70+
# verify messages are correct
71+
assert messages[0].content == "hi!"
72+
assert type(messages[0]) is HumanMessage
73+
assert messages[1].content == "whats up?"
74+
assert type(messages[1]) is AIMessage
75+
76+
# verify clear() clears message history
77+
history.clear()
78+
assert len(history.messages) == 0

0 commit comments

Comments
 (0)