From af0ad25deeab6b7beb6c942a6e977f6d518fe8cc Mon Sep 17 00:00:00 2001 From: Patrick Linstruth Date: Sun, 25 Nov 2018 18:58:18 -0800 Subject: [PATCH] Optimized RDAudioPort SQL queries. --- ChangeLog | 2 + lib/rdaudio_port.cpp | 92 +++++++++++++++++++++++--------------------- lib/rdaudio_port.h | 4 ++ 3 files changed, 54 insertions(+), 44 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4a6f02d6..570cb634 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18055,3 +18055,5 @@ * Removed the 'RDSvc::ImportOs' enumeration. * Removed the 'Windows Import Path' and 'Windows Preimport Command' fields from the 'Edit Service' dialog in rdadmin(1). +2018-11-25 Patrick Linstruth + * Optimized RDAudioPort SQL queries. diff --git a/lib/rdaudio_port.cpp b/lib/rdaudio_port.cpp index d5e545d5..55a89015 100644 --- a/lib/rdaudio_port.cpp +++ b/lib/rdaudio_port.cpp @@ -26,8 +26,38 @@ // RDAudioPort::RDAudioPort(QString station,int card) { + QString sql; + RDSqlQuery *q; + port_station=station; port_card=card; + + for(int port=0;portnext()) { + audio_input_port_level[q->value(0).toInt()]=q->value(1).toInt(); + audio_input_port_type[q->value(0).toInt()]=(RDAudioPort::PortType)q->value(2).toInt(); + audio_input_port_mode[q->value(0).toInt()]=(RDCae::ChannelMode)q->value(3).toInt(); + } + delete q; + + sql=QString("select PORT_NUMBER,LEVEL from AUDIO_OUTPUTS where ")+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",port_card); + q=new RDSqlQuery(sql); + while(q->next()) { + audio_output_port_level[q->value(0).toInt()]=q->value(1).toInt(); + } + delete q; } @@ -71,25 +101,20 @@ void RDAudioPort::setClockSource(RDCae::ClockSource src) RDAudioPort::PortType RDAudioPort::inputPortType(int port) { - RDAudioPort::PortType ret=RDAudioPort::Analog; - QString sql=QString("select TYPE from AUDIO_INPUTS where ")+ - "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ - QString().sprintf("CARD_NUMBER=%d && ",port_card)+ - QString().sprintf("PORT_NUMBER=%d",port); - RDSqlQuery *q=new RDSqlQuery(sql); - if(q->first()) { - ret=(RDAudioPort::PortType)q->value(0).toInt(); + if(port<0||port>RD_MAX_PORTS) { + return RDAudioPort::Analog; } - return ret; + return audio_input_port_type[port]; } void RDAudioPort::setInputPortType(int port,RDAudioPort::PortType type) { - if(port<0) { + if(port<0||port>RD_MAX_PORTS) { return; } + audio_input_port_type[port]=type; QString sql=QString("update AUDIO_INPUTS set ")+ QString().sprintf("TYPE=%d where ",type)+ "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ @@ -102,25 +127,20 @@ void RDAudioPort::setInputPortType(int port,RDAudioPort::PortType type) RDCae::ChannelMode RDAudioPort::inputPortMode(int port) { - RDCae::ChannelMode ret=RDCae::Normal; - QString sql=QString("select MODE from AUDIO_INPUTS where ")+ - "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ - QString().sprintf("CARD_NUMBER=%d && ",port_card)+ - QString().sprintf("PORT_NUMBER=%d",port); - RDSqlQuery *q=new RDSqlQuery(sql); - if(q->first()) { - ret=(RDCae::ChannelMode)q->value(0).toInt(); + if(port<0||port>RD_MAX_PORTS) { + return RDCae::Normal; } - return ret; + return audio_input_port_mode[port]; } void RDAudioPort::setInputPortMode(int port,RDCae::ChannelMode mode) { - if(port<0) { + if(port<0||port>RD_MAX_PORTS) { return; } + audio_input_port_mode[port]=mode; QString sql=QString("update AUDIO_INPUTS set ")+ QString().sprintf("MODE=%d where ",mode)+ "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ @@ -133,28 +153,20 @@ void RDAudioPort::setInputPortMode(int port,RDCae::ChannelMode mode) int RDAudioPort::inputPortLevel(int port) { - if(port<0) { + if(port<0||port>RD_MAX_PORTS) { return 400; } - int ret=400; - QString sql=QString("select LEVEL from AUDIO_INPUTS where ")+ - "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ - QString().sprintf("CARD_NUMBER=%d && ",port_card)+ - QString().sprintf("PORT_NUMBER=%d",port); - RDSqlQuery *q=new RDSqlQuery(sql); - if(q->first()) { - ret=q->value(0).toInt(); - } - return ret; + return audio_input_port_level[port]; } void RDAudioPort::setInputPortLevel(int port,int level) { - if(port<0) { + if(port<0||port>RD_MAX_PORTS) { return; } + audio_input_port_level[port]=level; QString sql=QString("update AUDIO_INPUTS set ")+ QString().sprintf("LEVEL=%d where ",level)+ "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ @@ -167,28 +179,20 @@ void RDAudioPort::setInputPortLevel(int port,int level) int RDAudioPort::outputPortLevel(int port) { - if(port<0) { + if(port<0||port>RD_MAX_PORTS) { return 400; } - int ret=400; - QString sql=QString("select LEVEL from AUDIO_OUTPUTS where ")+ - "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ - QString().sprintf("CARD_NUMBER=%d && ",port_card)+ - QString().sprintf("PORT_NUMBER=%d",port); - RDSqlQuery *q=new RDSqlQuery(sql); - if(q->first()) { - ret=q->value(0).toInt(); - } - return ret; + return audio_output_port_level[port]; } void RDAudioPort::setOutputPortLevel(int port,int level) { - if(port<0) { + if(port<0||port>RD_MAX_PORTS) { return; } + audio_output_port_level[port]=level; QString sql=QString("update AUDIO_OUTPUTS set ")+ QString().sprintf("LEVEL=%d where ",level)+ "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ diff --git a/lib/rdaudio_port.h b/lib/rdaudio_port.h index 060d5cd0..62b4fd97 100644 --- a/lib/rdaudio_port.h +++ b/lib/rdaudio_port.h @@ -45,6 +45,10 @@ class RDAudioPort private: QString port_station; int port_card; + int audio_input_port_level[RD_MAX_PORTS]; + int audio_output_port_level[RD_MAX_PORTS]; + RDAudioPort::PortType audio_input_port_type[RD_MAX_PORTS]; + RDCae::ChannelMode audio_input_port_mode[RD_MAX_PORTS]; };