Кто-нибудь знает лучший способ определения / разграничения представления или запроса, написанного в Legacy или Standard SQL, с использованием API BigQuery?
blockquote>Вы можете попробовать использовать регулярное выражение javascript определить тип SQL.
Вы можете использовать приведенный ниже фрагмент кода в качестве базовой линии
isStandardSql(idString) { let isStandard, fullId, partialId, projectId = ''; // This 'if' checks if the provided idString is of type standard and makes sure there is only one ':' in the expression (as in legacy syntax) const splitted = idString.split(/[:.]/g); if (splitted.length > 3) { const __ret = this.try2findProjectId(idString, projectId); idString = __ret.idString; projectId = __ret.projectId; } if ((idString.match(/:/g))) { // Regex that checks if the format of the id match legacy let matched = idString.match(/([\[]([^[]|[\[][\]])*[\]])/g); if (matched && matched[0]) { fullId = projectId + matched[0].substring(1, idString.length - 1); isStandard = false; } else { this.errorMessage("First Regex", idString); } // Same as the first only that here instead of ':' we are looking for '.' and we want to make sure there is more than 1 (as in standard syntax) } else if ((idString.match(/\./g) && idString.match(/\./g).length === 2)) { // Regex that checks if the format of the id match standard let matched = idString.match(/(`([^`]|``)*`)/g);// ? idString.match(/(`([^`]|``)*`)/g) : [idString]; if (matched && matched[0]) { fullId = projectId + matched[0].substring(1, idString.length - 1); isStandard = true } else if(!matched && idString){ fullId = projectId + idString; isStandard = true; } else { this.errorMessage("Second Regex", idString); } } else {//projectID.dataset // In case of id without projectId of proxy "use" project.dataset if(splitted.length === 2) { fullId = ''; if (idString[0] === '[' && idString[idString.length - 1] === ']') { isStandard = false; } else if (idString[0] === '`' && idString[idString.length - 1] === '`') { isStandard = true; } partialId = idString.replace(/`|\[|\]/g, '') } else { this.errorMessage("Third Regex", idString); } } // Return values is flag the determine the type (standard or legacy) and id without staring/ ending chars (``, []) return { isStandard, fullId: fullId, partialId: partialId }; } try2findProjectId(idString, projectId) { let numOfInstances = 0 for (let i = idString.length; i > 0; i--) { const char = idString[i - 1] if (char === ':' || char === '.') { numOfInstances++ if (numOfInstances === 2) { projectId = idString.substring(1, i - 1) idString = idString.substring(i - 1, idString.length) idString = idString[idString.length - 1] === '`' ? '`' + idString : idString idString = idString[idString.length - 1] === ']' ? '[' + idString : idString } } } return {idString, projectId} }
Вы правы, дизайнер часто пытается добавить значения по умолчанию к свойствам.
Добавьте это поверх объявления свойства:
У меня есть несколько похожая проблема. Я использую Infragistics GroupBox в пользовательском элементе управления, который я унаследовал, и теперь хочу изменить его внешний вид в производном классе. Я сделал его защищенным в базовом классе - поэтому он позволяет мне изменять свойства в производном классе. Но это не спасает его. Каждый раз, когда я открываю его - я получаю старые значения базового класса.
Есть идеи?
Редактировать: Я понял это.
Попытка различного значения для одного из приведенных выше ответов.
Использование [DesignerSerializationVisibility (DesignerSerializationVisibility.Content)]
вместо [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
создает код для измененных свойств - и все работает как требуется.
Попробуйте переопределить свойство DefaultSize вашего элемента управления.
Из MSDN: Свойство DefaultSize представляет размер элемента управления при его первоначальном создании.